在Java中,我可以执行以下操作:(假设Subclass
扩展Base
):
ArrayList<? extends Base> aList = new ArrayList<Subclass>();
C#.NET中的等价物是什么?显然没有? extends
关键字,这不起作用:
List<Base> aList = new List<Subclass>();
答案 0 :(得分:90)
实际上有一个等价(有点)的where
关键字。我不知道它是多么“接近”。我有一个功能,我需要做类似的事情。
我发现了一个msdn page。
我不知道你是否可以内联变量,但对于一个类,你可以这样做:
public class MyArray<T> where T: someBaseClass
或功能
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass
我没有在网页上看到它,但使用where
关键字可能会有变量。
答案 1 :(得分:8)
查看Covariance
引入的Contravariance
和.Net 4.0
。但它现在只适用于interfaces
。
IEnumerable<Base> list = new List<SubClass>();
答案 2 :(得分:6)
没有完全等价物(因为类型系统不能以完全相同的方式工作,类型擦除和所有),但您可以使用in
获得非常相似的功能和out
使用covariance and contravariance。
答案 3 :(得分:1)
如果您正在寻找两种类型的泛型,请看一下:
void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;