Pytania otagowane jako covariance

Kowariancja, kontrawariancja i niezmienność opisują, jak zmienia się istniejąca hierarchia dziedziczenia typu po poddaniu jej pewnej transformacji (takiej jak użycie w rodzajach). Jeśli transformacja zachowuje kolejność oryginalnej hierarchii, jest „kowariantna”. Jeśli ją odwraca, jest „kontrawariantna”. Jeśli ją złamie, jest „niezmienna”.



9
Przykład kowariancji i kontrawariancji w świecie rzeczywistym
Mam trochę problemów ze zrozumieniem, jak użyłbym kowariancji i kontrawariancji w prawdziwym świecie. Jak dotąd jedyne przykłady, które widziałem, to ten sam przykład starej tablicy. object[] objectArray = new string[] { "string 1", "string 2" }; Byłoby miło zobaczyć przykład, który pozwoliłby mi go użyć podczas rozwoju, gdybym mógł zobaczyć, …
162 c#  c#-4.0  covariance 


4
Dlaczego kowariancja i kontrawariancja nie obsługują typu wartości
IEnumerable<T>jest kowariancją, ale nie obsługuje typu wartości, tylko typ referencyjny. Poniższy prosty kod został pomyślnie skompilowany: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; Ale zmiana z stringna intspowoduje błąd kompilacji: IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList; Powód jest wyjaśniony w MSDN : Wariancja dotyczy tylko …



7
Konwersja macierzy równoległej z x na y może spowodować wyjątek w czasie wykonywania
Mam private readonlylistę LinkLabels ( IList<LinkLabel>). Później dodaję LinkLabels do tej listy i dodaję te etykiety do FlowLayoutPanelnastępujących: foreach(var s in strings) { _list.Add(new LinkLabel{Text=s}); } flPanel.Controls.AddRange(_list.ToArray()); ReSharper pokazuje mi ostrzeżenie: Co-variant array conversion from LinkLabel[] to Control[] can cause run-time exception on write operation. Proszę, pomóż mi zrozumieć: Co …

2
Problem z rozumieniem kontrawariancji kowariancji za pomocą typów ogólnych w języku C #
Nie mogę zrozumieć, dlaczego nie można kompilować następującego kodu C #. Jak widać, mam statyczną metodę ogólną Coś z IEnumerable<T>parametrem (i Tjest ograniczone jako IAinterfejs), a tego parametru nie można niejawnie przekonwertować na IEnumerable<IA>. Jakie jest wyjaśnienie? (Nie szukam obejścia, tylko po to, aby zrozumieć, dlaczego to nie działa). public …

3
Kowariancja, niezmienność i kontrawariancja wyjaśnione prostym językiem angielskim?
Dzisiaj przeczytałem kilka artykułów na temat kowariancji, kontrawariancji (i niezmienności) w Javie. Przeczytałem artykuł w angielskiej i niemieckiej Wikipedii oraz kilka innych postów na blogu i artykułów z IBM. Ale nadal jestem trochę zdezorientowany, o co dokładnie chodzi? Niektórzy mówią, że chodzi o relacje między typami i podtypami, niektórzy mówią, …

2
W jaki sposób generyczna kowariancja i kontrawariancja jest implementowana w C # 4.0?
Nie uczestniczyłem w PDC 2008, ale usłyszałem wiadomości, że C # 4.0 ma obsługiwać kowariancję i kontrwariancję rodzajową. Oznacza to, że List<string>można przypisać do List<object>. Jak to możliwe? W książce Jona Skeeta C # in Depth wyjaśniono, dlaczego typy generyczne języka C # nie obsługują kowariancji i kontrawariancji. Służy głównie …

3
Podaj przykłady funkcji, które demonstrują kowariancję i kontrawariancję zarówno w przypadku przeciążania, jak i nadpisywania w Javie? [Zamknięte]
Zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby skupiało się tylko na jednym problemie, edytując ten post . Zamknięte 5 lat temu . Popraw to pytanie Proszę pokazać dobry przykład kowariancji i kontrawariancji w Javie.


3
Dlaczego niezmienny zestaw Scali nie jest kowariantny w swoim typie?
EDYCJA : Ponownie napisano to pytanie na podstawie oryginalnej odpowiedzi scala.collection.immutable.SetKlasa nie jest kowariantna w jego parametr typu. Dlaczego to? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: Set[String] = Set("Hello", "World"); foo(s); //DOES NOT COMPILE, regardless of whether type is …


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.