C#相当于Java的<? 在generics中扩展Base>
在Java中,我可以做到以下几点:(假设Subclass
extends Base
):
ArrayList<? extends Base> aList = new ArrayList<Subclass>();
C#.NET中的等价物是什么? 没有? extends
显然? extends
关键字,这是行不通的:
List<Base> aList = new List<Subclass>();
其实有一个等效的(种), where
关键字。 我不知道它是如何“接近”的。 我有一个function,我需要做类似的事情。
我find了一个关于它的msdn页面 。
我不知道你是否可以为内联variables做一个variables,但是对于一个类你可以这样做:
public class MyArray<T> where T: someBaseClass
或为一个function
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass
我没有看到它在页面上,但使用“where”关键字可能是一个variables。
研究.Net 4.0
引入的Covariance
和Contravariance
。 但它现在只适用于interfaces
。
例:
IEnumerable<Base> list = new List<SubClass>();
没有确切的等值(因为types系统的工作方式不同,types删除和全部),但是使用协变和反变换可以获得非常相似的function。
如果你正在寻找两种types的generics,看看这个:
void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;