Frage

IEnumerable<T>, IComparable<T> und ein paar mehr sind jetzt typ Variante. IList<T>, ICollection<T> und viele andere sind es nicht. Warum?

War es hilfreich?

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

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.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top