IEnumerable<T>
, IComparable<T>
e alcuni altri sono ora di tipo variante. IList<T>
, ICollection<T>
e molti altri non lo sono. Perché?Tipo varianza in .NET Framework 4.0
6
A
risposta
11
.NET Framework 4.0 introduce sicuro co/contro-varianza. IList<T>
e ICollection<T>
avere T
sia in posizioni di ingresso e uscita mentre IEnumerable<T>
ha solo T
nelle posizioni di uscita e IComparable<T>
ha T
solo in ingresso le posizioni.
Si supponga IList<T>
supportato tipo varianza: "Il futuro di C#"
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 ha una breve, ma illuminante discussione che descrive co/controvarianza nel suo discorso, La sua discussione sulla covarianza e la contravarianza inizia a 50 minuti e 17 secondi nella presentazione.
2
Consulta anche: What C# 4.0 covariance doesn't do
Problemi correlati
- 1. SMO in .Net Framework 4.0
- 2. Supporto NHibernate .NET 4.0 framework?
- 3. Fondazione Sharepoint 2010 con .Net Framework 4.0
- 4. posso utilizzare .NET Framework 4.0 con VS2008?
- 5. Libreria EXIF per .NET 4.0 framework
- 6. .NET 4.0 Timeout del framework Entity scaduto
- 7. Installazione di .NET Framework 4.0, cambio unità
- 8. WPF lento per l'avvio su x64 in .NET Framework 4.0
- 9. Riferimento a .net framework 4.5.1 assembly in un progetto 4.0
- 10. Utilizzando Entity Framework 4.0 in un Net 3.5 Application
- 11. Managed DirectX in esecuzione dall'app .Net Framework 4.0 non cercare
- 12. tipo Scala limiti e varianza
- 13. log4net con .NET 4.0
- 14. MembershipProvider in .NET 4.0
- 15. .Net Framework 4.0 - Opcodes.Box presenti nel dizionario con int chiave
- 16. Exception.ToString interrotto in .NET 4.0?
- 17. Il programma di installazione di .Net Framework 4.0 include .Net Framework 3.5?
- 18. Microsoft Fakes e .Net 4.0
- 19. Entity Framework 5.0 - è richiesta la versione minima .Net Framework? .Net 4.0 o 4.5?
- 20. - risultato diverso in .NET 4.0
- 21. .NET Framework 4.0 e disegno su Aero Glass issue
- 22. Perché Windows Server 2012 non supporta .NET Framework 4.0?
- 23. Aggiungere .Net Framework 4.0 nel progetto di installazione
- 24. Codice personalizzato di SSRS 2012 .NET Framework 4.0 non supportato
- 25. errore nel metodo file.readlines (..) di .NET Framework 4.0
- 26. .net framework 4.0 applicazione eseguita da unità USB
- 27. Compatibilità con framework .NET: 3.5 Profilo client SP1 e 4.0
- 28. È possibile inviare HttpWebRequest utilizzando TLS1.2 su .NET 4.0 framework
- 29. È asp.net MVC2 incluso nel framework .net 4.0?
- 30. Rompere cambiamenti in .NET 4.0
Grazie! Sembra che l'uso degli indicizzatori renda ogni classe non variante. Ma ICollection <> ha T solo nei parametri di input. – UserControl
No, non è correlato agli indicizzatori in generale. Dipende dal parametro e dal tipo di ritorno degli indicizzatori (e dell'esistenza degli accessi get/set), proprio come qualsiasi altro metodo o proprietà. Potresti avere un indicizzatore come: T questo [int index] {get {return x [index]; }} e senza un set accessor, potrebbe essere una variante. –