Der ursprüngliche Beitrag wurde auf GCDN veröffentlicht, da GCDN Integrationsanpassungen vorgenommen hat und sich nun auf den Produktaustausch und andere Gründe konzentriert. Daher wurde der GCDN-Blog geschlossen, sodass ich einige nützliche Beiträge hierher verschieben musste.
13. August 2009 12:29 durch Augenzwinkern
Als ich diesen Blog schrieb, stellte mir CyljXu heute eine Frage: Wie rufe ich eine Methode mit Ref- oder Out-Parametern durch Reflektion auf? Da ich denke, dass dieses Problem auch bei anderen auftreten könnte, möchte ich es aufzeichnen, damit zukünftige Leser danach suchen können.
Dies wird auf MSDN erklärt, siehe Methode MethodBase.Invoke.
öffentlicher Objektaufruf (Objektobj, Objekt[]-Parameter)
Visuelles C++
öffentlich
: virtuelles Objekt^ Invoke( Object^ obj, arrayJ#
öffentlich
final Object Invoke(Object obj, Object[] Parameter)
JScript
öffentlich
Finale
Funktion
Invoke( obj: Objekt, Parameter: Objekt[]): Objekt
Parameter
obj Typ: System.Object
Das Objekt, für das Methoden oder Konstruktoren aufgerufen werden. Wenn die Methode statisch ist, wird dieser Parameter ignoriert. Wenn der Konstruktor statisch ist, muss dieser Parameter ein NULL-Verweis (Nothing in Visual Basic) oder eine Instanz der Klasse sein, in der der Konstruktor definiert ist.
Parametertyp: System.Object[]
Die Parameterliste der aufzurufenden Methode oder des Konstruktors. Dies ist ein Array von Objekten, die dieselbe Anzahl, Reihenfolge und denselben Typ haben wie die Parameter der aufgerufenen Methode oder des aufgerufenen Konstruktors. Wenn keine Parameter vorhanden sind, sollten die Parameter eine Nullreferenz sein (nichts in Visual Basic).
Wenn die durch diese Instanz dargestellte Methode oder der Konstruktor einen Ref-Parameter (ByRef in Visual Basic) annimmt, sind für den Parameter keine besonderen Attribute erforderlich, wenn diese Funktion zum Aufrufen der Methode oder des Konstruktors verwendet wird. Wenn ein Objekt im Array nicht explizit mit einem Wert initialisiert wird, enthält das Objekt den Standardwert für diesen Objekttyp. Für Elemente vom Referenztyp ist der Wert null Reference (Nothing in Visual Basic). Für Elemente vom Typ „Wert“ ist der Wert je nach spezifischem Elementtyp 0, 0,0 oder falsch.
Wie rufe ich den übergebenen Wert auf und verarbeite ihn? Bitte sehen Sie sich das folgende Beispiel an:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string content = "main"; //#1 variable 6 MethodInfo testMethod = typeof(Program).GetMethod("TestMethod", 7 BindingFlags.Static | BindingFlags.NonPublic); 8 if (testMethod != null) 9 {10 // Der folgende Weg kann den Inhalt nicht zurücknehmen.11 // ------ ----------------12 testMethod.Invoke(null, new object[] { content /* #1 variable */ });13 Console.WriteLine(content); 1 Variable, Ausgabe ist: main14 // ----------------------------------------- ----15 16 17 object [] invokeArgs = new object[] { content /* #1 variable */ };18 testMethod.Invoke(null, invokeArgs);19 content = (string)invokeArgs[0]; #2-Variable, vom Aufruf umgehen, auf content.20 setzen Console.WriteLine(content); // #2-Variable, Ausgabe ist: test21 }22 }23 24 static void TestMethod(ref string arg)25 {26 arg = "test "; // #2 Variable, möchte zum Hauptprozess umgehen.27 }28 }
Der Apostroph sein, der „Unmöglich“ in „Ich bin möglich“ verwandelte
-------------------------------------------------- --
WinkingZhangs Blog ( http://winkingzhang.cnblogs.com )
GCDN ( http://gcdn.grapecity.com/cs )
-