3

私はという名前のインターフェースを持っていますMan。このインターフェイスには、getList()タイプTのリストを返すメソッドがあります(インターフェイスを実装するクラスによって異なります)。を実装する3つのクラスがありますMansmall、、、normalおよびbig。すべてのクラスには、getList()thartがのリストsmallまたはリストまたはnormalリストを返すメソッドがありますbig

interface Man<T>{
  List<T>getList();
}

class small : Man<small>{
  List<small> getList(){
    return new List<small>(); 
  }
}

class normal : Man<normal>{
  List<normal> getList(){
    return new List<normal>(); 
  }
}

class big : Man<big>{
  List<big> getList(){
    return new List<big>(); 
  }
}

これで、クラスが作成されました。これには、のインスタンスでHome あるパラメーターが含まれています。 さまざまなタイプにすることができます:、、。のタイプパラメータを宣言するにはどうすればよいですか?bedManBedsmallnormalbigbed

class Home{
  Man bed<> // what i must insert between '<' and '>'??
}
4

2 に答える 2

6

Home同様に、ジェネリックにする必要があります。

class Home<T> 
{
    Man<T> bed;

コメントに応じて編集します。

どのタイプの「Man」が存在するかわからない場合、別のオプションは、ジェネリッククラスに非ジェネリックインターフェイスを実装させることです。

public interface IBed { // bed related things here

public class Man<T> : IBed
{
   // Man + Bed related stuff...

class Home
{
     IBed bed; // Use the interface

次に、インターフェースで定義された共有コントラクトに対して開発し、で任意のタイプをIBed使用できるようにしHomeます。


関係のない補足として、ここではより適切な命名スキームを使用することをお勧めします-名前はあまり意味がありません...なぜ「男」は「ベッド」と名付けられているのですか?また、標準のキャピタライゼーション規則を確認することもできます。

于 2013-01-29T23:46:15.327 に答える
0

あなたが何を求めているのか正確に特定することはできないので、家のパラメータ「ベッドサイズ」を設定する方法を理解するのに苦労していると推測します.

これは、Enum を使用することでおそらくより適切に解決されます。そうすれば、ベッドのサイズを表す単一のオブジェクトを持つことができます。

public interface IBed
{
    BedSize BedSize { get; set; }
}

public enum BedSize
{
   Small,
   Medium,
   Large
}

public class House : IBed
{
  public BedSize BedSize { get; set; }
}

これにより、後でベッドのサイズを決定する複雑さが軽減されるため、リフレクションやそのような面倒なことを行う必要がなくなります。

于 2013-01-29T23:56:34.817 に答える