質問

IEnumerable<T>, IComparable<T> さらにいくつかはタイプバリアントになりました。 IList<T>, ICollection<T> そして他の多くの人はそうではありません。なぜ?

役に立ちましたか?

解決

の.NET Framework 4.0が導入の安全のCO /コントラ分散。 IList<T>ICollection<T> を有しているTIEnumerable<T>のみ出力位置に入出力位置の両方をTておりIComparable<T>のみ入力位置にT を有する

IList<T>サポートされているタイプの分散を仮定します:

static void FailingMethod(IList<object> list) {
    list[0] = 5;
}

static void Test() {
    var a = new List<string>();
    a[0] = "hello";
    FailingMethod(a); // if it was variant, this method call would be unsafe
}

他のヒント

以下も参照してください。 C# 4.0 の共分散とは しません する

アンダースHejlsebergは、「C#のの未来を。」、簡潔がありますが、彼の話ではコ/ contravarianceを説明し議論を照らします共変性と反変性の彼の議論は、プレゼンテーションに50分17秒で開始します。

http://channel9.msdn.com/pdc2008/TL16/する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top