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>(); 

4 Solutions collect form web for “C#相当于Java的<? 在generics中扩展Base>”

其实有一个等效的(种), 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引入的CovarianceContravariance 。 但它现在只适用于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; 
  • 派生类中具有相同名称但具有不同签名的函数
  • 为什么在一个显式的只有getter的接口实现上拥有一个private setter是非法的?
  • 最小起订量 - 如何模拟一个接口需要被转换到另一个接口?
  • 在有现有的类时,接口如何取代多重inheritance的需要
  • 是否有任何理由让类中的每个方法都有一个抽象类?
  • 派生到基类成员数据的模板类访问
  • C ++构造函数/析构函数inheritance
  • C#如何缺less多重inheritance导致需要接口?
  • AngularJS控制器能否从同一模块中的另一个控制器inheritance?
  • 在Java中显式调用默认方法
  • SQLAlchemyinheritance