Tipo variación en .NET Framework 4.0
-
06-09-2019 - |
Pregunta
IEnumerable<T>
, IComparable<T>
y algunos más son ahora de tipo variable. IList<T>
, ICollection<T>
y muchos otros no lo son. ¿Por qué?
Solución
.NET Framework 4.0 introduce segura co / contra-varianza. IList<T>
y ICollection<T>
han T
tanto en las posiciones de entrada y salida, mientras que IEnumerable<T>
tiene T
sólo en posiciones de salida y IComparable<T>
tiene T
sólo en posiciones de entrada .
Supongamos IList<T>
apoyado varianza tipo:
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
}
Otros consejos
Vea también: Lo que C # 4.0 covarianza no do
Anders Hejlseberg tiene una breve pero esclarecedor debate que describe co / contravarianza en su charla, "El futuro de C #." Su discusión sobre la covarianza y contravarianza comienza en 50 minutos y 17 segundos en la presentación.