IEnumerable<T>
, IComparable<T>
i kilka innych jest teraz wariantami typu. IList<T>
, ICollection<T>
i wiele innych nie jest. Czemu?Wariancja typu w .NET Framework 4.0
6
A
Odpowiedz
11
.NET Framework 4.0 wprowadza bezpieczne co/contra-variance. IList<T>
i ICollection<T>
mieć T
zarówno na stanowiskach wejściowych i wyjściowych podczas IEnumerable<T>
ma tylko T
w pozycjach wyjściowych i IComparable<T>
ma T
tylko na wejściu pozycjonuje.
Załóżmy IList<T>
obsługiwany typ wariancji: "Przyszłość 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 ma krótki, ale oświetlające dyskusji opisujący CO/kontrawariancji w rozmowie, Jego dyskusja na temat kowariancji i kontrawariancji rozpoczyna się po 50 minutach i 17 sekundach od prezentacji.
2
Zobacz także: What C# 4.0 covariance doesn't do
Powiązane problemy
- 1. .net Compact Framework 4.0
- 2. Biblioteka EXIF dla .NET 4.0 framework
- 3. Instalacja .NET Framework 4.0, zmiana napędu
- 4. Wariancja typu Java, konsument rodzaju generycznego
- 5. Skąd usługa ASP.NET Web Service wchodzi w .Net Framework 4.0?
- 6. Gdzie jest GACUTIL dla .net Framework 4.0 w Windows 7?
- 7. Entity Framework 5.0 - wymagana minimalna wersja .Net Framework? .Net 4.0 lub 4.5?
- 8. Microsoft.Expression.Blend w aplikacji WPF targetting .net 4.0
- 9. Zespoły .NET 2.0 mogą działać w środowisku .NET 4.0?
- 10. .NET framework 4.0 aplikacja uruchamiana z dysku USB
- 11. Wariancja populacji w r
- 12. Przełamując zmiany w .NET 4.0
- 13. cloud computing w .net 4.0
- 14. Czy instalacja .NET 4.5 NAPRAWDĘ zastępuje zespoły .NET 4.0?
- 15. Svcutil.exe dla .NET 4.0?
- 16. FxCop dla .NET 4.0
- 17. Log4Net i .NET 4.0
- 18. Entity Framework 4.0 GetChanges() odpowiednik
- 19. .NET Framework - kiedy uaktualnić?
- 20. Entity Framework w .NET?
- 21. Czy .net 4.5 działa obok .net 4.0?
- 22. ma .Net 4.5 zawierają .Net 4.0
- 23. Tesseract 3.0 OCR .NET 4.0 Wrapper
- 24. Limit czasu jednostki .NET 4.0 upłynął
- 25. Aktualizacja projektu .Net 2.0 do .Net 4.0
- 26. Jak zachować zachowanie .Net 4.0, jeśli .Net 4.5 jest zainstalowany?
- 27. Dlaczego ta wariancja jest nieważna?
- 28. skompilować NET 4.0 projekt na serwerze kompilacji z .net 4.5
- 29. maxRequestLength dla .Net 4.5.1 framework
- 30. Serializacja XML - inny wynik w .NET 4.0
Dzięki! Wygląda na to, że używanie indeksujących sprawia, że każda klasa jest nie-wariantowa. Ale ICollection <> ma T tylko w parametrach wejściowych. – UserControl
Nie, nie jest on ogólnie związany z indeksami. Zależy od parametrów i typu zwracanych indeksatorów (oraz istnienia akcesorów get/set), tak jak każdej innej metody lub właściwości. Możesz mieć indeksator taki jak: T this [indeks int] {get {return x [index]; }} i bez zestawu accessor może to być wariant. –