3

我有一个名为Man. 在这个接口中,我有一个getList()返回类型 T 列表的方法(依赖于实现接口的类)。我有 3 个实现Man: smallnormalbig. 每个类都有方法getList()tart 返回一个列表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 它包含一个参数bed,它是Man. Bed可以有多种类型:small, normal, big. 如何声明类型参数bed

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

然后,您可以针对接口定义的共享合约进行开发,并允许IBedHome.


在不相关的旁注中,我建议在这里使用更好的命名方案-名称没有多大意义……为什么“男人”被命名为“床”?您可能还想查看标准的大写约定

于 2013-01-29T23:46:15.327 回答
0

我无法准确确定您的要求,因此我将推断您在弄清楚如何为房屋设置参数“床尺寸”时遇到了麻烦。

使用枚举可能会更好地解决这个问题。这样你就可以有一个对象来描述床的大小。

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 回答