Jaka jest różnica między <out T>i <T>? Na przykład: public interface IExample<out T> { ... } vs. public interface IExample<T> {
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”.
Jaka jest różnica między <out T>i <T>? Na przykład: public interface IExample<out T> { ... } vs. public interface IExample<T> {
Chociaż możemy dziedziczyć po klasie bazowej / interfejsie, dlaczego nie możemy zadeklarować List<> używającej tej samej klasy / interfejsu? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List<A> listOfA = new...
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...
Z książki Effective Java Joshua Blocha, Tablice różnią się od typu ogólnego na dwa ważne sposoby. Pierwsze tablice są kowariantne. Typy generyczne są niezmienne. Kowariantny oznacza po prostu, że jeśli X jest podtypem Y, to X [] będzie również podtypem Y []. Tablice są kowariantne, ponieważ...
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...
На этот вопрос есть ответы на Stack Overflow на русском : Ковариантность и контрвариантность обобщений Mam problem ze zrozumieniem różnicy między kowariancją a kontrawariancją.
Kontynuując to pytanie , czy ktoś może wyjaśnić w Scali, co następuje: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Rozumiem różnicę między +Tiw Tdeklaracji typu (kompiluje się, jeśli używam T). Ale jak właściwie napisać klasę, która...
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...
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...
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...
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...
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...
Co to jest kowariantny typ zwracany w Javie? W ogóle w programowaniu
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:...
Natknąłem się na nie w podręczniku, który czytam na C #, ale mam trudności ze zrozumieniem ich, prawdopodobnie z powodu braku kontekstu. Czy istnieje dobre, zwięzłe wyjaśnienie, czym one są i do czego są przydatne? Edytuj dla wyjaśnienia: Kowariantny interfejs: interface IBibble<out...
Wygląda na to, że obiekt List nie może być przechowywany w zmiennej List w C #, a nawet nie może być jawnie rzutowany w ten sposób. List<string> sl = new List<string>(); List<object> ol; ol = sl; powoduje, że nie można niejawnie przekonwertować typu
Pracuję z platformą .NET i naprawdę chcę mieć możliwość tworzenia niestandardowego typu strony, z której korzysta cała moja witryna. Problem pojawia się, gdy próbuję uzyskać dostęp do strony z kontrolki. Chcę mieć możliwość zwrócenia strony określonego typu zamiast strony domyślnej. Czy jest na...
Czy istnieje sposób na zastąpienie zwracanych typów w C #? Jeśli tak, to jak, a jeśli nie, dlaczego i jaki jest zalecany sposób? Mój przypadek jest taki, że mam interfejs z abstrakcyjną klasą bazową i jej potomkami. Chciałbym to zrobić (ok niezupełnie, ale jako przykład!): public interface...
Kompiluje się to poprawnie w C # 7.3 (Framework 4.8): (string, string) s = ("a", "b"); (object, string) o = s; Wiem, że jest to cukier składniowy dla następujących składników, który również poprawnie się kompiluje: ValueTuple<string, string> s = new ValueTuple<string, string>("a",...