Javaでは、次のことができます(Subclass
はBase
を拡張すると仮定します):
ArrayList<? extends Base> aList = new ArrayList<Subclass>();
C#.NETで同等のものは何ですか?明らかに? extends
キーワードはなく、これは機能しません。
List<Base> aList = new List<Subclass>();
実際には、同等の(並べ替えの)where
キーワードがあります。どれだけ「近い」のかわかりません。同様のことをするために必要な機能がありました。
msdn page が見つかりました。
変数に対してこのインラインを実行できるかどうかはわかりませんが、クラスに対しては実行できます:
_public class MyArray<T> where T: someBaseClass
_
または関数public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass
ページには表示されませんでしたが、where
キーワードを使用すると、変数に使用できる場合があります。
.Net 4.0
で導入されたCovariance
およびContravariance
を調べてください。ただし、現在はinterfaces
でのみ機能します。
IEnumerable<Base> list = new List<SubClass>();
exactに相当するものはありません(型システムはまったく同じように動作せず、型消去などすべてではないため) 共分散と反分散 を使用したin
とout
の同様の機能。
2つのジェネリック型を探している場合は、これを見てください:
void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;