DynamicMethod.Invoke Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 null
an.
- 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 unter Verwendung 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 vorbereitet sein, um 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 Das Aufrufen der Invoke -Methode oder - CreateDelegate Methode wird die dynamische Methode abgeschlossen. Alle weiteren Versuche, die dynamische Methode zu ändern, z. B. das Ändern von Parameterdefinitionen oder das Ausgeben weiterer Microsoft Intermediate Language (MSIL), werden ignoriert. es wird keine Ausnahme ausgelöst.
Alle dynamischen Methoden sind statisch, sodass der obj
Parameter immer ignoriert wird. Um eine dynamische Methode wie eine instance-Methode zu behandeln, verwenden Sie die Überladung, die CreateDelegate(Type, Object) ein Objekt instance.
Wenn die dynamische Methode über keine Parameter verfügt, sollte der Wert von parameters
sein null
. Andernfalls sollte 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 keine direkten 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 festgelegten false
Parameter erstellt werden. Wenn Sie hingegen eine Methode mit restrictedSkipVisibility
festgelegt auf true
erstellen, damit sie auf ein ausgeblendetes Element 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.