77

Java では、次のことができます: ( Subclassextendsを想定Base):

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

C# .NET で同等のものは何ですか? どうやらキーワードがなく? extends、これは機能しません。

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

4 に答える 4

128

実際には、同等の(一種の)whereキーワードがあります。どれだけ「近い」かわかりません。私は似たようなことをする必要がある機能を持っていました。

それに関するmsdnページを見つけました。

変数に対してこれをインラインで実行できるかどうかはわかりませんが、クラスの場合は実行できます:
public class MyArray<T> where T: someBaseClass
または関数の場合
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

ページには表示されませんでしたが、whereキーワードを使用すると、変数が可能になる可能性があります。

于 2011-10-11T20:03:08.903 に答える
8

を調べてCovariance紹介Contravariance.Net 4.0ます。しかし、それはinterfaces今だけで動作します。

例:

IEnumerable<Base> list = new List<SubClass>();
于 2011-01-19T06:55:47.670 に答える
7

正確に同等のものはありません (型システムは型消去とすべてでまったく同じように機能しないため)、covariance と contravarianceinout使用して、非常によく似た機能を得ることができます。

于 2011-01-19T06:54:47.403 に答える