DynamicMethod.Invoke Methode

Definition

Ruft die dynamische Methode mithilfe der angegebenen Parameter unter den Einschränkungen des angegebenen Ordners mit den angegebenen Kulturinformationen auf.

public:
 override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object Invoke(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object

Parameter

obj
Object

Dieser Parameter wird für dynamische Methoden ignoriert, da sie statisch sind. Geben Sie null an.

invokeAttr
BindingFlags

Eine bitweise Kombination von BindingFlags Werten.

binder
Binder

Ein Binder Objekt, das die Bindung, die Koersion von Argumenttypen, den Aufruf von Elementen und das Abrufen von MemberInfo Objekten durch Spiegelung ermöglicht. Ist binder dies nullder Grund, wird der Standardordner verwendet. Weitere Details finden Sie unter Binder.

parameters
Object[]

Eine Argumentliste. Dies ist ein Array von Argumenten mit der gleichen Zahl, Reihenfolge und Typ wie die Parameter der methode, die aufgerufen werden soll. Wenn keine Parameter vorhanden sind, sollte dieser Parameter sein null.

culture
CultureInfo

Eine Instanz, die zum Steuern der CultureInfo Koersion von Typen verwendet wird. Wenn dies der Fall ist null, wird der CultureInfo aktuelle Thread verwendet. Diese Informationen werden beispielsweise benötigt, um einen String Wert von 1000 korrekt in einen Double Wert zu konvertieren, da 1000 von verschiedenen Kulturen unterschiedlich dargestellt wird.

Gibt zurück

A Object containing the return value of the invoked method.

Ausnahmen

Die VarArgs Anrufkonvention wird nicht unterstützt.

Die Anzahl der Elemente in parameters stimmt nicht mit der Anzahl der Parameter in der dynamischen Methode überein.

Der Typ eines oder mehrerer Elemente stimmt parameters nicht mit dem Typ des entsprechenden Parameters der dynamischen Methode überein.

Die dynamische Methode ist einem Modul zugeordnet, wird nicht anonym gehostet und wurde mit skipVisibility auf false festgelegt, aber die dynamische Methode greift auf Elemente zu, die nicht public oder internal (Friend in Visual Basic).

-oder-

Die dynamische Methode wird anonym gehostet und wurde mit skipVisibility festgelegter Eigenschaft falseerstellt, aber sie greift nicht auf Elemente publiczu.

-oder-

Die dynamische Methode enthält unverifizierbaren Code. Weitere Informationen finden Sie im Abschnitt "Verifizierung" in den Hinweisen für DynamicMethod.

Beispiele

Im folgenden Codebeispiel wird eine dynamische Methode mit exakter Bindung mithilfe der US-English Kultur aufgerufen. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die DynamicMethod Klasse bereitgestellt wird.

Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
    BindingFlags.ExactBinding, Nothing, invokeArgs, _
    New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)

Hinweise

Zusätzlich zu den aufgelisteten Ausnahmen sollte der aufrufende Code vorbereitet sein, um ausnahmen abzufangen, die von der dynamischen Methode ausgelöst werden.

Das Ausführen einer dynamischen Methode mit einem von der CreateDelegate Methode erstellten Delegaten ist effizienter als das Ausführen mit der Invoke Methode.

Durch Aufrufen der Invoke Methode oder der CreateDelegate Methode wird die dynamische Methode abgeschlossen. Alle weiteren Versuche, die dynamische Methode zu ändern, z. B. das Ändern von Parameterdefinitionen oder das Aussenden weiterer Microsoft-Zwischensprache (MSIL), wird ignoriert; es wird keine Ausnahme ausgelöst.

Alle dynamischen Methoden sind statisch, sodass der obj Parameter immer ignoriert wird. Um eine dynamische Methode so zu behandeln, als wäre sie eine Instanzmethode, verwenden Sie die CreateDelegate(Type, Object) Überladung, die eine Objektinstanz übernimmt.

Wenn die dynamische Methode keine Parameter aufweist, sollte der Wert parameters sein null. Andernfalls sollte die Anzahl, Typ und Reihenfolge von Elementen im Parameterarray mit der Anzahl, dem Typ und der Reihenfolge der Parameter der dynamischen Methode identisch sein.

Note

Diese Methodenüberladung wird von der Invoke(Object, Object[]) von der MethodBase Klasse geerbten Methodenüberladung aufgerufen, sodass die vorherigen Hinweise auf beide Überladungen angewendet werden.

Diese Methode erfordert keine Berechtigungen direkt, aber das Aufrufen der dynamischen Methode kann abhängig von der Methode zu Sicherheitsanforderungen führen. Beispielsweise werden keine Anforderungen an anonym gehostete dynamische Methoden gestellt, die mit dem restrictedSkipVisibility-Parameter auf false festgelegt werden. Wenn Sie dagegen eine Methode erstellen, die restrictedSkipVisibilitytrue so festgelegt ist, dass sie auf ein ausgeblendetes Element einer Zielassembly zugreifen kann, verursacht die Methode eine Anforderung an die Berechtigungen der Zielassembly plus ReflectionPermission mit der ReflectionPermissionFlag.MemberAccess Kennzeichnung.

Gilt für:

Weitere Informationen