Was ist der Unterschied zwischen <out T>und <T>? Beispielsweise: public interface IExample<out T> { ... } vs. public interface IExample<T> {
Kovarianz, Kontravarianz und Invarianz beschreiben, wie sich die vorhandene Typvererbungshierarchie ändert, wenn sie einer Transformation unterzogen wird (z. B. Verwendung innerhalb von Generika). Wenn die Transformation die Reihenfolge der ursprünglichen Hierarchie beibehält, ist sie "kovariant". Wenn es es umkehrt, ist es "kontravariant". Wenn es bricht, ist es "invariant".
Was ist der Unterschied zwischen <out T>und <T>? Beispielsweise: public interface IExample<out T> { ... } vs. public interface IExample<T> {
Während wir von der Basisklasse / Schnittstelle erben können, warum können wir nicht deklarieren List<> , dass dieselbe Klasse / Schnittstelle verwendet wird? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List<A>...
Aus Effective Java von Joshua Bloch, Arrays unterscheiden sich vom generischen Typ in zwei wichtigen Punkten. Erste Arrays sind kovariant. Generika sind unveränderlich. Kovariante bedeutet einfach, wenn X der Subtyp von Y ist, dann ist X [] auch der Subtyp von Y []. Arrays sind kovariant, da der...
Ich habe ein wenig Probleme zu verstehen, wie ich Kovarianz und Kontravarianz in der realen Welt verwenden würde. Bisher waren die einzigen Beispiele, die ich gesehen habe, das gleiche alte Array-Beispiel. object[] objectArray = new string[] { "string 1", "string 2" }; Es wäre schön, ein...
IEnumerable<T>ist eine Co-Variante, unterstützt jedoch keinen Werttyp, sondern nur einen Referenztyp. Der folgende einfache Code wurde erfolgreich kompiliert: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; Beim Wechsel von stringzu...
Overа этот вопрос есть ответы на Stapelüberlauf на русском : Ковариантность и контрвариантность обобщений Ich habe Probleme, den Unterschied zwischen Kovarianz und Kontravarianz zu verstehen.
Kann jemand im Anschluss an diese Frage in Scala Folgendes erklären: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } Ich verstehe den Unterschied zwischen +Tund Tin der Typdeklaration (sie wird kompiliert, wenn ich sie verwende T)....
Ich habe eine private readonlyListe von LinkLabels ( IList<LinkLabel>). Ich füge später LinkLabels zu dieser Liste hinzu und füge diese Bezeichnungen FlowLayoutPanelwie folgt hinzu: foreach(var s in strings) { _list.Add(new LinkLabel{Text=s}); } flPanel.Controls.AddRange(_list.ToArray());...
Ich kann nicht verstehen, warum der folgende C # -Code nicht kompiliert wird. Wie Sie sehen können, habe ich eine statische generische Methode Etwas mit einem IEnumerable<T>Parameter (und Tist darauf beschränkt, eine IASchnittstelle zu sein), und dieser Parameter kann nicht implizit in...
Heute habe ich einige Artikel über Kovarianz, Kontravarianz (und Invarianz) in Java gelesen. Ich habe den englischen und deutschen Wikipedia-Artikel sowie einige andere Blog-Beiträge und Artikel von IBM gelesen. Aber ich bin immer noch ein bisschen verwirrt darüber, worum es genau geht? Einige...
Ich habe nicht an der PDC 2008 teilgenommen, aber ich habe einige Neuigkeiten gehört, dass C # 4.0 angekündigt wurde, um generische Kovarianz und Kontravarianz zu unterstützen. Das heißt, List<string>kann zugewiesen werden List<object>. Wie kann das sein? In Jon Skeets Buch C # in Depth...
Was ist ein kovarianter Rückgabetyp in Java? In der objektorientierten Programmierung im
Geschlossen . Diese Frage muss fokussierter sein . Derzeit werden keine Antworten akzeptiert. Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage so, dass sie sich nur auf ein Problem konzentriert, indem Sie diesen Beitrag bearbeiten . Geschlossen vor 5 Jahren . Verbessere diese Frage...
BEARBEITEN : Diese Frage wurde basierend auf der ursprünglichen Antwort neu geschrieben Die scala.collection.immutable.SetKlasse ist in ihrem Typparameter nicht kovariant. Warum ist das? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit =...
Ich bin auf diese in einem Lehrbuch gestoßen, das ich auf C # lese, aber ich habe Schwierigkeiten, sie zu verstehen, wahrscheinlich aufgrund mangelnden Kontexts. Gibt es eine gute, präzise Erklärung dafür, was sie sind und wofür sie nützlich sind? Zur Verdeutlichung bearbeiten: Kovariante...
Es scheint, dass ein List-Objekt nicht in einer List-Variablen in C # gespeichert und nicht einmal explizit auf diese Weise umgewandelt werden kann. List<string> sl = new List<string>(); List<object> ol; ol = sl; Ergebnisse in Can nicht implizit konvertiert Typ...
Ich arbeite mit dem .NET Framework und möchte wirklich einen benutzerdefinierten Seitentyp erstellen können, den alle meine Websites verwenden. Das Problem tritt auf, wenn ich versuche, über ein Steuerelement auf die Seite zuzugreifen. Ich möchte in der Lage sein, meinen bestimmten Seitentyp...
Gibt es eine Möglichkeit, Rückgabetypen in C # zu überschreiben? Wenn ja wie und wenn nicht warum und was ist eine empfohlene Vorgehensweise? Mein Fall ist, dass ich eine Schnittstelle mit einer abstrakten Basisklasse und deren Nachkommen habe. Ich würde das gerne machen (ok nicht wirklich, aber...
Was ist der Unterschied zwischen den folgenden generischen Definitionen in Scala: class Foo[T <: List[_]] und class Bar[T <: List[Any]] Mein Bauch sagt mir, dass sie ungefähr gleich sind, aber dass letzteres expliziter ist. Ich finde Fälle, in denen das erstere kompiliert, das letztere...
Dies wird in C # 7.3 (Framework 4.8) korrekt kompiliert: (string, string) s = ("a", "b"); (object, string) o = s; Ich weiß, dass dies syntaktischer Zucker für Folgendes ist, der auch korrekt kompiliert wird: ValueTuple<string, string> s = new ValueTuple<string, string>("a",...