C#相当于Java的?在泛型中扩展Base>

Lou*_*hys 58 .net c# generics inheritance extends

在Java中,我可以执行以下操作:(假设Subclass扩展Base):

ArrayList<? extends Base> aList = new ArrayList<Subclass>();
Run Code Online (Sandbox Code Playgroud)

C#.NET中的等价物是什么?? extends显然没有关键字,这不起作用:

List<Base> aList = new List<Subclass>();
Run Code Online (Sandbox Code Playgroud)

Ray*_*orm 94

实际上有一个等价物(有点),where关键字.我不知道它是多么"接近".我有一个功能,我需要做类似的事情.

我找到了一个关于它的msdn页面.

我不知道你是否可以内联一个变量,但是你可以做一个类:
public class MyArray<T> where T: someBaseClass
或者一个函数
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

我没有在页面上看到它,但使用where关键字可能是变量.

  • 这是一个多么丑陋的方式,但至少它完成了这项工作!+1 (3认同)
  • 美丽,几乎正是我所寻找的.谢谢!public class ImplementingClass <T>:BaseClass <T>其中T:GenericBaseClass {...} (2认同)
  • 这个回应实际上有资格作为一个答案 (2认同)

dec*_*one 8

研究CovarianceContravariance介绍.Net 4.0.但它interfaces现在只适用.

例:

IEnumerable<Base> list = new List<SubClass>();
Run Code Online (Sandbox Code Playgroud)


Meh*_*dad 6

没有确切的等价物(因为类型系统不能以完全相同的方式工作,类型擦除和所有),但您可以获得非常相似的功能,inout使用协方差和逆变.


小智 5

如果您正在寻找两种类型的泛型,请看一下:

    void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;
Run Code Online (Sandbox Code Playgroud)