Von der Basisklasse auch ein Array bilden

maria1

Mitglied
Hallo,

ich habe eine Klasse A die von einer Klasse B vererbt und ich überschreibe Methode "C"(aus der Klasse B). Ich möchte nicht nur von Klasse B vererben, sondern zusätzlich noch ein Array der Basisklasse (Klasse B) in Klasse A erzeugen. Was passiert, wenn ich eine Instanz von Klasse A erzeuge, wird dann für das Array von der Basisklasse meine überschriebene Methode "C" aufgerufen oder die eigene Methode"C" von der Klasse B. Gilt in diesem Fall auch der Polymorphismus?(Programmiere mit C#). Bin sehr dankbar für eine Anwort....
 
Wenn ich dich richtig verstanden hab soll das in etwa so aussehen:
C#:
public class A
    {
        public void C() { System.Diagnostics.Debug.WriteLine("Method C of A"); }
    }

    public class B : A
    {
        public new void C() { System.Diagnostics.Debug.WriteLine("Method C of B"); }
        public A[] arr = new A[] { new A() };
    }

...
B x = new B();
x.C(); // Method C of B
x.arr[0].C(); // Method C of A
Was passiert, wenn ich eine Instanz von Klasse A erzeuge, wird dann für das Array von der Basisklasse meine überschriebene Methode "C" aufgerufen oder die eigene Methode"C" von der Klasse B.
Für das Array der Basisklasse wird dann auch die Methode C der Basisklasse aufgerufen. Das Überschreiben der geerbten Methode wirkt sich ja nicht auf die Methode der Basisklasse aus.
Das obige Beispiel gilt auch wenn du C der Basisklasse als virtual deklarierst und überschreibst.
Ein unterschied gibt es Allerdings dann wenn du versucht die Klassen zu konvertieren:
C#:
public class A
    {
        public void C() { System.Diagnostics.Debug.WriteLine("Method C of A"); }
    }

    public class B : A
    {
        public new void C() { System.Diagnostics.Debug.WriteLine("Method C of B"); }
        public A[] arr = new A[] { new A() };
    }

...
B x = new B();
x.C(); // Method C of B

A y = (A)x;
y.C(); // Method C of A

C#:
public class A
    {
        public virtual void C() { System.Diagnostics.Debug.WriteLine("Method C of A"); }
    }

    public class B : A
    {
        public override void C() { System.Diagnostics.Debug.WriteLine("Method C of B"); }
        public A[] arr = new A[] { new A() };
    }

...
B x = new B();
x.C(); // Method C of B

A y = (A)x;
y.C(); // Method C of B
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück