6

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

4

3 に答える 3

11

.NET Framework 4.0では、安全な共分散が導入されています。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
}
于 2009-05-31T19:16:41.063 に答える
2

参照: C# 4.0 共分散が行わないこと

于 2009-05-31T21:28:17.787 に答える
1

Anders Hejlsebergは、彼の講演「The Future of C#」で共変性と反変性について説明する、簡潔でありながら明るい議論をしています。共変性と反変性に関する彼の議論は、プレゼンテーションの50分17秒から始まります。

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

于 2009-05-31T19:22:23.783 に答える