Heim > Backend-Entwicklung > C++ > Wie kann ich von einer abgeleiteten Klasse in C# aus auf die virtuelle Methodenimplementierung einer Basisklasse zugreifen?

Wie kann ich von einer abgeleiteten Klasse in C# aus auf die virtuelle Methodenimplementierung einer Basisklasse zugreifen?

Barbara Streisand
Freigeben: 2024-12-26 18:43:09
Original
945 Leute haben es durchsucht

How Can I Access a Base Class's Virtual Method Implementation from a Derived Class in C#?

Ü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...
  }
}
Nach dem Login kopieren

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"); 
  }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage