.NET Reflection: Wie Methode der Schnittstelle aufrufen, ohne Instanz zu erstellen?

7

Ich habe eine Situation, in der ich die Methode der Schnittstelle mit Reflektion aufrufen muss, so wie diese

%Vor%

Wie Sie sehen können, erstelle ich keine Instanz eines Objekts! Und, wie ich annehmen kann, erhalte ich eine Ausnahme

  

Nicht-statische Methode erfordert ein Ziel

Und Frage, kann ich Methode der Schnittstelle mit Reflexion aufrufen, ohne Instanz der Schnittstelle zu erstellen und wenn JA, Wie kann ich es tun?

    
jitm 07.05.2010, 13:39
quelle

6 Antworten

12

Wenn Sie absolut sicher sind, dass sich die Schnittstellenmethode nicht auf den Objektstatus auswirkt (und das ist im Allgemeinen eine sehr schlechte Annahme), könnten Sie eine Instanz ohne Aufruf des Konstruktors erstellen, indem Sie FormatterServices.GetUnitializedObject . Persönlich würde ich dringend davon abraten, da jede Menge schlechter Dinge passieren können, wenn Sie eine Interface-Methode auf einem nicht initialisierten Typ aufrufen.

    
Dan Bryant 07.05.2010, 13:56
quelle
10

Wenn es sich um eine Instanzmethode handelt, benötigen Sie eine Instanz, mit der Sie die Methode aufrufen können. Daher "Instanz" -Methode.

Instanzmethoden können Abhängigkeiten von Instanzvariablen haben, über die die Reflektion nicht informiert wäre. Daher kann nicht garantiert werden, dass eine Instanzmethode den Zustand der Instanz des Typs, in dem sie definiert ist, nicht ändert.

Aus diesem Grund erhalten Sie diese FxCop-Warnungen (hier paraphrasieren) "Machen Sie diese Methode statisch, da sie den Zustand der Klasse nicht verändert".

    
Will 07.05.2010 13:42
quelle
4

Wenn die Methode nicht statisch ist, müssen Sie eine Objektinstanz erstellen, um sie zu verwenden. Da Schnittstellen keine statischen Methoden haben können, müssen Sie eine Instanz eines Objekts mit der Schnittstelle erstellen, um die Methode auszuführen.

    
kemiller2002 07.05.2010 13:43
quelle
2

Ihre Methode für nicht statische Schnittstellen muss eventuell eine Methode aufrufen, die für ein Objekt implementiert ist. Wenn die Implementierung der Methode nicht existiert, kann keine echte Methode aufgerufen werden.

    
Robin 07.05.2010 13:46
quelle
1

Eine Schnittstelle hat keine Implementierung, so dass Sie ihre Methode nicht ohne eine Instanz eines Objekts aufrufen können, das diese Schnittstelle implementiert.

    
ba__friend 07.05.2010 13:46
quelle
1

Können Sie eine Schnittstellenmethode aufrufen, ohne eine Instanz zu erstellen? Nein. Schnittstellen sind zum Beispiel Mitglieder; Statische Klassenmitglieder sind nicht mit Schnittstellen verbunden.

Sie können möglicherweise erhalten, was Sie wollen, indem Sie eine statische Implementierung der Schnittstelle bereitstellen,

%Vor%

Oder Sie könnten eine Erweiterungsmethode machen:

%Vor%     
Joshua Tacoma 07.05.2010 13:53
quelle

Tags und Links