ich vor kurzem über Kovarianz und Kontra lesen - wenig Codebeispiel unten:Kontra in der Praxis - C#
public class BaseClass{
public int x = 1;
public static void print(BaseClass objClass)
{
Console.WriteLine(objClass.GetType().Name + " " + objClass.x);
}
}
public class DerivedClass : BaseClass{
public int x = 2;
}
public class Program
{
public static void Main(string[] args)
{
BaseClass bC = new BaseClass();
DerivedClass dC = new DerivedClass();
BaseClass.print(bC); //DerivedClass 1
DerivedClass.print(bC); //DerivedClass 1
BaseClass.print(dC); //DerivedClass 1
DerivedClass.print(dC); //DerivedClass 1
}
}
Meine Frage ist - was uns Kontra in der Praxis geben? Ich weiß, dass ich das Objekt der DerivedClass als Argument in die BaseClass-Methode übergeben kann (wobei der Parameter der BaseClass-Typ ist), aber was sind die Vorteile einer solchen Operation? Und warum, wenn ich das DerivedClass-Objekt übergebe, gibt es den Wert von x in BaseClass zurück?
Vielleicht ist dies ein schlechtes Beispiel für die Vorteile der Kontravarianz zu erklären, dann wäre ich dankbar für ein anderes Beispiel.
Dies verwendet keine Kontravarianz überall. – Lee
Wow - so gibt es irreführende Tutorials im Internet;) Aber wie auch immer - kann mir jemand erklären, warum wenn ich das DerivedClass-Objekt übergebe, gibt es mir den Wert von x in BaseClass zurück? Wenn es nichts ändert, warum können wir das tun? PS. Sinatr - Danke für diesen Link – Hadrian
Sie verwechseln Varianz mit Vererbung/Polymorphie. –