DynamicMethod.Invoke Methode

Definition

Ruft die dynamische Methode mithilfe des angegebenen Parameters und den Einschränkungen des angegebenen Binders 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);
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 bei dynamischen Methoden ignoriert, da er statisch ist. Geben Sie nullan.

invokeAttr
BindingFlags

Eine bitweise Kombination von BindingFlags-Werten.

binder
Binder

Ein Binder-Objekt, das die Bindung, die Umwandlung von Argumenttypen, das Aufrufen von Membern und das Abrufen von MemberInfo-Objekten über Reflektion ermöglicht. Wenn binder den Wert null aufweist, wird der Standardbinder verwendet. Weitere Details finden Sie unter Binder.

parameters
Object[]

Eine Argumentliste. Diese ist ein Array von Argumenten, die hinsichtlich Anzahl, Reihenfolge und Typ mit den Parametern der aufzurufenden Methode identisch sind. Wenn keine Parameter vorhanden sind, muss dieser Parameter gleich null sein.

culture
CultureInfo

Eine Instanz von CultureInfo für die Steuerung der Umwandlung von Typen. Wenn dies null ist, wird die CultureInfo des aktuellen Threads verwendet. Diese Informationen sind z.B. erforderlich, um ein String, das 1000 darstellt, ordnungsgemäß in einen Double-Wert zu konvertieren, da 1000 in verschiedenen Kulturen unterschiedlich dargestellt wird.

Gibt zurück

Ein Object, das den Rückgabewert der aufgerufenen Methode enthält.

Ausnahmen

Die VarArgs-Aufrufkonvention 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 von parameters entspricht nicht dem Typ des entsprechenden Parameters der dynamischen Methode.

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

- oder -

Die dynamische Methode wird anonym gehostet und wurde mit skipVisibility (festgelegt auf false) erstellt, aber sie greift auf Member zu, die nicht public sind.

- oder -

Die dynamische Methode enthält nicht überprüfbaren Code. Weitere Informationen finden Sie im Abschnitt „Überprüfung“ 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.
array<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(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
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 aufgeführten Ausnahmen sollte der aufrufende Code darauf vorbereitet sein, alle 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 die Ausführung mit der Invoke -Methode.

Durch aufrufen der Invoke -Methode oder der CreateDelegate -Methode wird die dynamische Methode abgeschlossen. Jeder weitere Versuch, die dynamische Methode zu ändern, z. B. das Ändern von Parameterdefinitionen oder das Ausgeben von mehr Microsoft Intermediate Language (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 Überladung, die CreateDelegate(Type, Object) eine Objektinstanz akzeptiert.

Wenn die dynamische Methode über keine Parameter verfügt, sollte der Wert von parameters sein null. Andernfalls sollten die Anzahl, der Typ und die Reihenfolge der Elemente im Parameterarray mit der Anzahl, dem Typ und der Reihenfolge der Parameter der dynamischen Methode identisch sein.

Hinweis

Diese Methodenüberladung wird von der von der Invoke(Object, Object[])MethodBase -Klasse geerbten Methodenüberladung aufgerufen, sodass die obigen Hinweise für beide Überladungen gelten.

Diese Methode erfordert nicht direkt Berechtigungen, 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 auf falsefestgelegten Parameter erstellt werden. Wenn Sie dagegen eine Methode mit restrictedSkipVisibility festgelegt auf true erstellen, damit sie auf einen ausgeblendeten Member einer Zielassembly zugreifen kann, verursacht die Methode eine Anforderung für die Berechtigungen der Zielassembly plus ReflectionPermission mit dem ReflectionPermissionFlag.MemberAccess Flag.

Hinweis

Vor .NET Framework 2.0 war diese Methode mit dem MemberAccess Flag erforderlichReflectionPermission.

Gilt für:

Weitere Informationen