我想知道这个问题是否有效,我的代码如下:
我将使用多态时的通用类:
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();
}
}
在这种情况下可以使用继承吗?
答案 0 :(得分:1)
在这种情况下可以使用继承吗?
不,不是。类不支持协方差和逆变。想象一下,你有以下几点:
List<ParentClass> parents = new List<Child1>();
parents.Add(new Child2());
这不是类型安全的。出于同样的原因,您无法创建FooIn1
,其中ParentClass
是预期的。
答案 1 :(得分:0)
您不能在通用防御中使用父类型,然后将其初始化为具有子通用类型的列表。相反,您可以根据父类型创建通用列表。然后,您可以在列表中放入其子类型的任何成员。枚举列表时,您必须使用is运算符检查对象是否属于哪种子类型。