Im folgenden Code muss ich die Methode MdrResponseInterpreter
static
deklarieren, sonst habe ich einen Kompilierungsfehler.
Warum? Da _mdrResponseBuilder
nicht statisch ist, erwarte ich, dass MdrResponseInterpreter
auf this
Weil Feldinitialisierer keinen Zugriff auf this
/ Instanzmitglieder haben. Verschieben Sie die Initialisierung in den Konstruktor, wenn Sie auf Instanzelemente zugreifen möchten.
Die Spezifikation sagt:
Ein Variableninitialisierer für ein Instanzfeld kann nicht auf die Instanz verweisen, die gerade erstellt wird. Daher ist es ein Fehler bei der Kompilierung, auf
zu verweisenthis
in einem Variableninitialisierer
Obwohl Ihr Code nicht explizit auf this
verweist, referenziert die Methodengruppe, die die Konvertierung delegiert, this
implizit, wenn es sich bei der Methode um ein Instanzenmitglied handelt.
Um der Antwort von CodeInChaos (die korrekt ist) hinzuzufügen, können Sie einfach die Zuweisung zum Konstruktor verschieben:
%Vor% BEARBEITEN: Das obige nimmt an, dass StandartBuilder
ein Delegattyp ist. Wenn es sich um einen Typ mit einem Konstruktor handelt, der einen Delegattyp akzeptiert, müssen Sie zurück zu new StandartBuilder(MdrResponseInterpreter)
gehen, aber immer noch im Konstruktor.
Die Methode muss statisch sein, da sie bei der Objektinitialisierung aufgerufen wird, bevor der Konstruktor mit der Ausführung begonnen hat. Wenn Sie auf this
zugreifen möchten, rufen Sie die Initialisierungsmethode in Ihrem Konstruktor auf.
Sie dürfen keine Instanzmitglieder in Initializern verwenden.
Stellen Sie sich einen Delegierten so vor, als hätte er 1) eine Objektreferenz und 2) eine Methodenreferenz. Da Sie nicht auf this
zugreifen können, gibt es keine Möglichkeit, die Objektreferenz festzulegen. Daher besteht die einzige Möglichkeit, die Methode als Delegat zu verwenden, darin, sie als static
zu deklarieren (weil die Objektverweis eines Delegaten null
ist). für statische Methoden). Wenn Sie Ihre Initialisierung in den Konstruktor verschieben, können Sie dies umgehen.
Tags und Links c# initializer delegates method-group