.NET Framework 4.0 の型の違い
-
06-09-2019 - |
質問
IEnumerable<T>
, IComparable<T>
さらにいくつかはタイプバリアントになりました。 IList<T>
, ICollection<T>
そして他の多くの人はそうではありません。なぜ?
解決
の.NET Framework 4.0が導入の安全のCO /コントラ分散。 IList<T>
がICollection<T>
を有しているT
とIEnumerable<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秒で開始します。
所属していません StackOverflow