我正在尝试在 C# 4.0 中执行以下操作:
我有一个基类和两个派生类
public class Base {}
public class DerivedClass1 : Base {}
public class DerivedClass2 : Base {}
我想做这样的事情,但是行不通。
如何告诉泛型列表接受基类和基类的派生类。
public class Class_1
{
public Class_1()
{
List<DerivedClass2> list = new List<DerivedClass2>();
new Class_2(list);
}
}
public class Class_2
{
public Class_2(List<Base> list)
{
}
}
在 Java 中我可以做这样的事情
public class Class_2
{
public Class_2(List<? extends Base> list)
{
}
}
C#中是否存在类似的东西
我希望我的问题很清楚,它只是关于列表的泛型。
非常感谢:)
最佳答案
一般情况:
function Foo<T>(List<T> list) where T : Base {
...
}
加上接口(interface)和委托(delegate),C# 允许协变/逆变。
例如IEnumerable<T>
和 IList<T>
,因此您的代码将起作用!请注意,如果 List<T>
允许这样做s,你可以插入一个 Derived1
进入列表 Derived2
s 通过使用公共(public)基类,这会破坏类型安全。所以只需坚持上面的只读接口(interface)。
关于C# 派生类型到泛型列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647489/