DynamicMethod.Invoke Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wywołuje metodę dynamiczną przy użyciu określonych parametrów w ramach ograniczeń określonego powiązania z określonymi informacjami o kulturze.
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
Parametry
- obj
- Object
Ten parametr jest ignorowany dla metod dynamicznych, ponieważ są statyczne. Podaj wartość null.
- invokeAttr
- BindingFlags
Bitowa kombinacja BindingFlags wartości.
- binder
- Binder
Binder Obiekt, który umożliwia powiązanie, przymus typów argumentów, wywołanie elementów członkowskich i pobieranie MemberInfo obiektów przez odbicie. Jeśli binder parametr to null, jest używany domyślny binder. Aby uzyskać więcej informacji, zobacz Binder.
- parameters
- Object[]
Lista argumentów. Jest to tablica argumentów o tej samej liczbie, kolejności i typie, co parametry metody do wywołania. Jeśli nie ma parametrów, ten parametr powinien mieć wartość null.
- culture
- CultureInfo
Wystąpienie CultureInfo używane do zarządzania przymusem typów. Jeśli jest nullto wartość , CultureInfo zostanie użyty element dla bieżącego wątku. Na przykład te informacje są potrzebne do poprawnego przekonwertowania elementu String reprezentującego Double wartość 1000 na wartość, ponieważ 1000 jest reprezentowane inaczej przez różne kultury.
Zwraca
Element Object zawierający wartość zwracaną metody wywoływanej.
Wyjątki
Konwencja wywoływania nie jest obsługiwana VarArgs .
Liczba elementów w parameters elemecie nie jest zgodna z liczbą parametrów w metodzie dynamicznej.
Typ co najmniej jednego elementu parameters nie jest zgodny z typem odpowiedniego parametru metody dynamicznej.
Metoda dynamiczna jest skojarzona z modułem, nie jest hostowana anonimowo i została skonstruowana z zestawem skipVisibility ustawioną na false, ale metoda dynamiczna uzyskuje dostęp do elementów członkowskich, które nie są public lub internal (Friend w Visual Basic).
— lub —
Metoda dynamiczna jest anonimowo hostowana i została skonstruowana z ustawioną wartością skipVisibilityfalse, ale uzyskuje dostęp do elementów członkowskich, które nie publicsą .
— lub —
Metoda dynamiczna zawiera nieweryfikowalny kod. Zobacz sekcję "Weryfikacja" w uwagach dotyczących DynamicMethod elementu.
Przykłady
Poniższy przykład kodu wywołuje metodę dynamiczną ze ścisłym powiązaniem, używając kultury amerykańsko-angielskiej. Ten przykład kodu jest częścią większego przykładu udostępnionego dla klasy DynamicMethod.
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)
Uwagi
Oprócz wymienionych wyjątków kod wywołujący powinien być przygotowany do przechwytywania wszelkich wyjątków zgłaszanych przez metodę dynamiczną.
Wykonywanie metody dynamicznej za pomocą delegata utworzonego metodą CreateDelegate jest bardziej wydajne niż przy użyciu metody Invoke.
Wywołanie metody Invoke lub metody CreateDelegate kończy metodę dynamiczną. Wszelkie dalsze próby zmiany metody dynamicznej, takie jak modyfikowanie definicji parametrów lub emitowanie większej liczby języków pośrednich firmy Microsoft (MSIL), są ignorowane; nie jest zgłaszany żaden wyjątek.
Wszystkie metody dynamiczne są statyczne, więc obj parametr jest zawsze ignorowany. Aby traktować metodę dynamiczną jak metodę instancyjną, użyj przeciążenia CreateDelegate(Type, Object), które przyjmuje wystąpienie obiektu.
Jeśli metoda dynamiczna nie ma parametrów, wartość powinna mieć wartość parametersnull. W przeciwnym razie liczba, typ i kolejność elementów w tablicy parametrów powinny być identyczne z liczbą, typem i kolejnością parametrów metody dynamicznej.
Note
To przeciążenie metody jest wywoływane przez Invoke(Object, Object[]) przeciążenie metody dziedziczone z MethodBase klasy, więc powyższe uwagi mają zastosowanie do obu przeciążeń.
Ta metoda nie wymaga uprawnień bezpośrednio, ale wywołanie metody dynamicznej może spowodować zapotrzebowanie na zabezpieczenia, w zależności od metody. Na przykład żadne wymagania nie są wymagane dla anonimowo hostowanych metod dynamicznych, które są tworzone za pomocą parametru ustawionego restrictedSkipVisibility na wartość false. Z drugiej strony, jeśli utworzysz metodę z restrictedSkipVisibility ustawioną wartością true , aby mogła uzyskać dostęp do ukrytego elementu członkowskiego zestawu docelowego, metoda spowoduje zapotrzebowanie na uprawnienia zestawu docelowego oraz ReflectionPermission flagę ReflectionPermissionFlag.MemberAccess .