C # -Methode aus der abgeleiteten Klasse als Delegat im Basiskonstruktor

8

Warum ist das folgende C # nicht legal? Gibt es eine geeignete Problemumgehung?

%Vor%     
NNN 21.02.2011, 10:45
quelle

5 Antworten

9

Es bezieht sich effektiv auf "das" in den Argumenten für den Basiskonstruktor, was Sie nicht tun können.

Wenn Ihr Delegierter wirklich keinen Zugriff auf this benötigt (was Ihr Beispiel nicht tut), können Sie ihn einfach statisch machen. Sie können auch eine Methodengruppenumwandlung verwenden, um es einfacher zu machen:

%Vor%

Wenn Sie > "this" verwenden müssen, könnten Sie:

  • Machen Sie es zu einer virtuellen Methode, anstatt einen Delegaten aufzurufen
  • Machen Sie es zu einer statischen Methode, die eine geeignete Instanz übernimmt, z. B.

    %Vor%
Jon Skeet 21.02.2011, 10:47
quelle
1

Grundsätzlich erhalten Sie den Compilerfehler, weil Sie auf die Instanzmethode Method ohne eine Instanz Ihrer Klasse Derived verweisen. Wenn Sie base aufrufen, ist der Konstruktor noch nicht fertig und Sie haben noch keine Instanz Ihrer Klasse. Wenn du Method static gemacht hast, würde es gut funktionieren.

    
Klaus Byskov Pedersen 21.02.2011 10:47
quelle
1

Eine andere Lösung besteht darin, einfach die Initialisierung des Delegaten auf die abgeleitete Klasse zu verschieben:

%Vor%     
Dave Cousineau 16.10.2015 17:19
quelle
0

Haben Sie versucht, Method() statisch zu machen, wie der Compiler anzeigt? Das Problem besteht darin, dass eine Instanz von Derived erst verfügbar ist, nachdem der Konstruktor zurückgegeben wurde, sodass Sie keine Instanzmethode mehr aufrufen können.

    
Dave 21.02.2011 10:47
quelle
0

Die "Problemumgehung" wäre, Methode () zu einer statischen Methode zu machen.

Ich kann die technischen Gründe, warum dies nicht funktioniert, nicht erklären, aber im Wesentlichen versuchen Sie, eine Methode für eine Instanz aufzurufen, die noch nicht existiert. Wie könnte es möglicherweise funktionieren?

    
Steve Hobbs 21.02.2011 10:48
quelle

Tags und Links