Überschreiben virtueller Methoden: Zugriff auf die Basisimplementierung
Wenn in einer objektorientierten Umgebung eine Klasse eine virtuelle Methode überschreibt, wird sie zu einer gemeinsamen Frage zum Zugriff auf die ursprüngliche Implementierung.
Beachten Sie Folgendes Code:
class A { virtual void X() { Console.WriteLine("x"); } } class B : A { override void X() { Console.WriteLine("y"); } } class Program { static void Main() { A b = new B(); // Call A.X somehow, not B.X... } }
Das Ziel besteht darin, die X-Methode der Klasse A aus dem Bereich der Klasse B aufzurufen. Das Standardverhalten beim Überschreiben einer virtuellen Methode besteht jedoch darin, die Implementierung in der abgeleiteten Klasse zu ersetzen.
Zugriff auf die Basisimplementierung
In C# ist es leider nicht möglich, explizit von außerhalb des Überschriebenen auf die Basismethodenimplementierung zuzugreifen Methode. Dies liegt daran, dass der Dispatch-Mechanismus der virtuellen Methode den Aufruf dynamisch an die überschriebene Implementierung in B bindet.
Alternative Ansätze
Wenn der Zugriff auf die Basisimplementierung von entscheidender Bedeutung ist, kann dies der Fall sein Konstruktionsmängel, die eine Überlegung wert sind. Die Funktionalität entspricht möglicherweise nicht dem Zweck einer virtuellen Methode und sollte möglicherweise in einer nicht virtuellen Methode implementiert werden.
Alternativ kann man die Basisimplementierung innerhalb der überschriebenen Methode selbst aufrufen:
class B : A { override void X() { base.X(); Console.WriteLine("y"); } }
Dieser Methodenaufruf ist jedoch auf den Bereich der überschriebenen Methode der abgeleiteten Klasse beschränkt.
Weitere Informationen Erkundung
Obwohl C# keine direkte Methode für den Zugriff auf die Basisimplementierung bietet, sind alternative Ansätze zu berücksichtigen, wie z. B. die Verwendung von Reflektion oder IL-Manipulation (Intermediate Language), um dieses Verhalten zu erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich von einer abgeleiteten Klasse in C# aus auf die virtuelle Methodenimplementierung einer Basisklasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!