Ich habe die folgende Situation:Wie (virtuell) wird die ursprüngliche Implementierung einer virtuellen Methode aufgerufen?
In einer 3rd-Party-Bibliothek (kann nicht geändert werden):
class A { public virtual void M() {} }
class B : A { public override void M() {} }
In meinem eigenen Code:
class C : B { public override void M() {} }
Von C
‚s Implementierung von Verfahren M
Ich möchte A
's anrufen (aber nicht B
ist !!). Kann ich?
Alle Tricks akzeptiert, Reflexion enthalten. Ich habe bereits die Reflektion versucht, aber unter Verwendung der MethodInfo
, die ich von typeof(A)
bekomme, wird immer noch ein virtueller Anruf erzeugt (Aufruf der C
Implementierung mit anschließendem Stapelüberlauf).
Die Ableitung C
von A
kommt aufgrund der Komplexität der Reimplementierung B
nicht in Frage.
Dies ist einer der Gründe, warum ich so gut wie nie Vererbung. – ChaosPandion
@ChaosPandion: Ja! Total! Wenn ich darüber nachdenke, warum überhaupt irgendeinen Code überhaupt schreiben? – Timwi
@Timwi - Ich weiß, du machst nur Spaß, aber es gibt bessere Möglichkeiten wie Zusammensetzung. – ChaosPandion