Typ Varianz in .NET Framework 4.0
-
06-09-2019 - |
Frage
IEnumerable<T>
, IComparable<T>
und ein paar mehr sind jetzt typ Variante. IList<T>
, ICollection<T>
und viele andere sind es nicht. Warum?
Lösung
.NET Framework 4.0 einleitet sicher co / Kontravarianz. IList<T>
und ICollection<T>
haben sowohl in Ein- und Ausgangspositionen T
während IEnumerable<T>
T
nur in Ausgangspositionen und IComparable<T>
hat T
nur in Eingabepositionen .
Angenommen IList<T>
unterstützten Typ Varianz:
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
}
Andere Tipps
Siehe auch: Was C # 4.0 Kovarianz nicht tun
Anders Hejlseberg hat eine kurze, aber aufschlussreiche Erörterung, die co / Kontra in seinem Vortrag beschreibt: „Die Zukunft von C #.“ Seine Diskussion über Kovarianz und Kontra beginnt bei 50 Minuten und 17 Sekunden in die Präsentation.