IEnumerable<T>
, IComparable<T>
y algunos más son variantes de tipo. IList<T>
, ICollection<T>
y muchos otros no lo son. ¿Por qué?Tipo de varianza en .NET Framework 4.0
6
A
Respuesta
11
.NET Framework 4.0 introduce caja fuerte co/contra-varianza. IList<T>
y ICollection<T>
tener T
tanto en las posiciones de entrada y salida, mientras que IEnumerable<T>
sólo tiene T
en posiciones de salida y IComparable<T>
tiene T
sólo en las posiciones de entrada.
Asumir IList<T>
tipo soportado varianza:
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
}
1
Anders Hejlseberg tiene una breve pero esclarecedora discusión que describe co/contravarianza en su charla, "El futuro de C#." Su discusión sobre covarianza y contravarianza comienza a los 50 minutos y 17 segundos de la presentación.
2
Consulte también: What C# 4.0 covariance doesn't do
Cuestiones relacionadas
- 1. Genérico Varianza en C# 4.0
- 2. .net Compact Framework 4.0
- 3. ¿Necesita .NET Framework 4.0 reiniciar?
- 4. ¿Incluye .Net Framework 4.0 Installer el .Net Framework 3.5?
- 5. SMO Ensambles en .NET Framework 4.0
- 6. Linq2SQL vs EF en .net Framework 4.0
- 7. Soporte de NHibernate .NET Framework 4.0?
- 8. .NET 4.0 Framework Requisitos de actualización?
- 9. ¿Puedo usar .NET Framework 4.0 con VS2008?
- 10. Biblioteca EXIF para el framework .NET 4.0
- 11. Sharepoint 2010 Fundación con .Net Framework 4.0
- 12. .NET 4.0 aplicación interna de tipo
- 13. ¿Dónde entró el servicio web ASP.NET en .Net Framework 4.0?
- 14. Bug en el método File.ReadLines (..) de .NET Framework 4.0
- 15. .NET Framework 4.0 y dibujo en cuestión de Aero Glass
- 16. Añadir .Net Framework 4.0 en proyecto de instalación
- 17. WPF lento para iniciar en x64 en .NET Framework 4.0
- 18. ¿Dónde está GACUTIL para .NET Framework 4.0 en Windows 7?
- 19. Instalación de .NET Framework 4.0, unidad de cambio
- 20. ¿Por qué Visual Studio 2010 tiene .NET Framework 4.0 Client Profile como tipo de proyecto predeterminado?
- 21. aplicación de .NET Framework 4.0 desde la unidad USB
- 22. ¿Cómo instalar .NET Framework 4.0 como parte de la instalación?
- 23. volátil para el tipo de referencia en .net 4.0
- 24. .NET 4.0 Entity framework expiró el tiempo de espera
- 25. log4net con .NET 4.0
- 26. .Net Framework 4.0 tiene características para conectar a DB2
- 27. .NET framework compatibility: 3.5 SP1 & 4.0 Client Profile
- 28. MembershipProvider en .NET 4.0
- 29. Microsoft Fakes y .Net 4.0
- 30. Instalador NSIS con .NET 4.0
Gracias! Parece que el uso de indexadores hace que cualquier clase no sea variante. Pero ICollection <> tiene T solo en los parámetros de entrada. – UserControl
No, no está relacionado con indexadores en general. Depende del parámetro y el tipo de retorno de los indexadores (y la existencia de los descriptores de acceso get/set), al igual que cualquier otro método o propiedad. Es posible que tenga un indexador como: T este [int index] {get {return x [index]; }} y sin un acceso de conjunto, podría ser una variante. –