.NETTO-Reflexion: Wie call-Methode der Schnittstelle ohne eine Instanz erstellen?
Ich habe die situation, wo ich anrufen-Methode der Schnittstelle mit Reflexion, wie diese
object x = null;
MethodInfo method = interfaceExists.GetMethod("ShutDown");
method.Invoke(x, new object[] { 4 })
Wie Sie sehen kann ich nicht, erstellen Sie eine Instanz des Objekts! Und, wie ich soll, ich erhalte Ausnahme
Nicht-statische Methode erfordert ein Ziel
Und Frage,, Kann ich call-Methode der Schnittstelle mit der spiegelung ohne die Schaffung Instanz der Schnittstelle und wenn JA, Wie kann ich es tun ?
- Denken Sie an es auf diese Weise: Was würde diese Methode tatsächlich tun, wenn Sie konnte es aufrufen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sich absolut sicher, dass der interface-Methode werden nicht die Auswirkungen Objekt-Zustand (und das ist generell eine sehr schlechte Annahme), könnten Sie ohne eine Instanz ruft den Konstruktor durch den Aufruf FormatterServices.GetUnitializedObject. Persönlich würde ich dringend empfehlen, gegen diese, als eine beliebige Anzahl von schlechten Dinge, die passieren könnte, wenn beim Aufruf einer interface-Methode auf ein nicht initialisiertes geben.
Ob es eine Instanz-Methode, benötigen Sie eine Instanz mit dem Aufruf der Methode. Daher "Instanz" - Methode.
Instanz-Methoden haben können Abhängigkeiten auf Instanz-Variablen, die Reflexion würde nicht wissen, es kann also nicht garantieren, dass eine Instanz-Methode ändert nicht den Status der Instanz der Art, in der Sie definiert ist.
Deshalb erhalten Sie diese FxCop Warnungen über (Umschreibung hier) "Machen diese Methode statisch, da es nicht ändern Sie den Status der Klasse".
Wenn die Methode ist nicht statisch, Sie haben, um eine Objektinstanz zu erstellen, es zu benutzen. Da die Schnittstellen nicht haben, können Sie statische Methoden, müssen Sie erstellen eine Instanz eines Objekts mit der Schnittstelle auf die Ausführung der Methode.
Ihre nicht-statische interface-Methode wird schließlich eine Methode aufrufen müssen, die auf ein Objekt implementiert. Wenn die Implementierung der Methode nicht vorhanden, dann keine wirkliche Methode aufgerufen werden kann.
Ein interface hat keine Implementierung, so dass Sie nicht rufen Sie die Methode ohne eine Instanz von einem Objekt implementiert diese Schnittstelle.
Können Sie Aufruf einer interface-Methode ohne Erzeugung einer Instanz? Nein. Schnittstellen sind zum Beispiel Mitglieder; statische Klassenmitglieder sind nicht bezogen auf Schnittstellen.
Könnten Sie in der Lage sein zu bekommen, was Sie wollen, indem Sie eine statische Implementierung der Schnittstelle,
Oder Sie könnten eine extension-Methode: