0

.net 3.5 フレームワークを使用しています。以下は私のコードです。

class Base {}

class Derived : Base {}

class Program {
  static Main() {
    IList<Base> base_col = new List<Base>();
    base_col.Add(new Derived()); // Do you think this line code is good?
  }
}

ジェネリックは型チェックに適していると思いますか?

一歩前に進みます。

static Main() { 
  IList<Derived> base_col = new List<Derived>(); 
  Process(base_col); // error. 
} 
static Process(IEnumarable<Base> baseCollection) { } 

ここでコードが壊れるのはなぜですか?

4

1 に答える 1

1

DerivedBase同様であるため、示されているコードに問題はありません。また、ジェネリックとはほとんど関係ありません。

あなたの編集に関して:あなたが提供するコードは、IEnumerable<>インターフェースが反変である.NET 4で動作します。以前のバージョンではこの機能を使用していませんでした (インターフェイスでの相互/反変性のサポートは、V2 以降の CLR にあるようですが、.NET Framework の V4 まで、この機能を使用してコードを発行する言語はありませんでした)。

この特定のケースでは、Cast<>LINQ 関数を安全に使用できます。

static Main() { 
  IList<Derived> base_col = new List<Derived>(); 
  Process(base_col.Cast<Base>());
} 
于 2012-08-27T13:17:15.653 に答える