如何在泛型类中使用多态

时间:2015-10-05 05:55:07

标签: c# generics inheritance polymorphism

我想知道这个问题是否有效,我的代码如下:

我将使用多态时的通用类​​:

public class Foo<T> where T : fatherClass
{
   public T FooMethod1()
   {
     //enter code here
   }

   public void FooMethod2(T value)
   {
     //enter code here
   }
}

父亲的实体类是fatherClass

public class childClass1 : fatherClass
{
   //Attributes
}

public class childClass2 : fatherClass
{
   //Attributes
}

父类是泛型类(Foo)的具体类

public class FooIn1 : Foo<childClass1>
{ }

public class FooIn2 : Foo<childClass2>
{ }

尝试代码:

class Program()
{
   public static Main(string[] args)
   {
      Foo<fatherClass> util;
      util = new FooIn1();
      util = new FooIn2();
   }
}

在这种情况下可以使用继承吗?

2 个答案:

答案 0 :(得分:1)

  

在这种情况下可以使用继承吗?

不,不是。类不支持协方差和逆变。想象一下,你有以下几点:

List<ParentClass> parents = new List<Child1>();
parents.Add(new Child2());

这不是类型安全的。出于同样的原因,您无法创建FooIn1,其中ParentClass是预期的。

答案 1 :(得分:0)

您不能在通用防御中使用父类型,然后将其初始化为具有子通用类型的列表。相反,您可以根据父类型创建通用列表。然后,您可以在列表中放入其子类型的任何成员。枚举列表时,您必须使用is运算符检查对象是否属于哪种子类型。