簡體   English   中英

C#相當於Java的?在泛型中擴展Base>

[英]C#'s equivalent of Java's <? extends Base> in generics

在Java中,我可以執行以下操作:(假設Subclass擴展Base ):

ArrayList<? extends Base> aList = new ArrayList<Subclass>();

C#.NET中的等價物是什么? 沒有? extends 顯然? extends關鍵字,這不起作用:

List<Base> aList = new List<Subclass>();

實際上有一個Equivalent(有點), where關鍵字。 我不知道它是多么“接近”。 我有一個功能,我需要做類似的事情。

我找到了一個關於它的msdn頁面

我不知道你是否可以內聯一個變量,但對於一個類,你可以這樣做:
public class MyArray<T> where T: someBaseClass
或功能
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

我沒有在頁面上看到它,但使用where關鍵字可能是變量。

研究.Net 4.0引入的CovarianceContravariance 但它現在只適用於interfaces

例:

IEnumerable<Base> list = new List<SubClass>();

沒有完全等效(因為類型系統不完全一樣的方式工作,與類型擦除和所有),但你可以得到非常類似的功能inout使用協方差和逆變

如果您正在尋找兩種類型的泛型,請看一下:

    void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM