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