Polymorphie - Aufruf von mehreren Methoden hintereinander
-
Halli Hallo
Es ist folgender Code gegeben:
class Basis { protected int i=0; public Basis() { } public virtual void DoSometing() { i++; } } class Subclass : Basis { public Subclass() { } public override void DoSometing() { Console.Write(i+" "); } }
Wenn ich nun sowas schreibe:
Basis B = new Subclass();
Stimmt es, das dann zuerst der Konstruktor der Basisklasse und dann der von der Subklasse aufgerufen wird?
Nun mache ich:
B.DoSometing();
Mein Wunsch: Es wird zuerst die Methode von der Basisklasse und dann die von der Subklasse aufgerufen. Ich möchte NICHT mit base.DoSomething() arbeiten müssen. Gibt es da einen Weg, dass man so wie beim Konstruktur so eine Kette von Methodenaufrufen hat, welche sich von der Basis bis zur untersten Subklasse durchschlängelt?
Es soll also nach mehrmaligen Aufruf von B.DoSometing() folgendes ausgegeben werden:
1 2 3 4 5 ... BAM BAM
Gibt es da einen Weg?
-
XMAMan schrieb:
Stimmt es, das dann zuerst der Konstruktor der Basisklasse und dann der von der Subklasse aufgerufen wird?
Ja, die Konstruktoren werden von "oben (Basisklasse) nach unten (Subklasse)" ausgeführt.
Mein Wunsch: Es wird zuerst die Methode von der Basisklasse und dann die von der Subklasse aufgerufen. Ich möchte NICHT mit base.DoSomething() arbeiten müssen.
Warum?
Gibt es da einen Weg?
Nein, nicht dass ich wüsste. Ich halte es aber auch für falsch, das zu machen, denn es widerspricht den gängigen Mechanismen in Programmiersprachen und würde eher Verwirrung stiften.
-
Das geht nicht. Machs vielleicht einfach so:
class Basis { protected int i=0; public Basis() { } public void DoSometing() { i++; Step(); } protected abstract void Step(); } class Subclass : Basis { public Subclass() { } override void Step() { Console.Write(i+" "); } }
-
@µ: Danke für die Idee. Ich werde sie bei meinen Programm so verwenden, wenn niemand hier noch eine bessere Lösung zeigt.