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 ma null
wartość , jest używany domyślny binder. Aby uzyskać więcej informacji, zobacz: .
- 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 używane do nadzorowania CultureInfo przymusu typów. Jeśli jest null
to wartość , CultureInfo używany jest element dla bieżącego wątku. Na przykład te informacje są potrzebne do poprawnego przekonwertowania elementu reprezentującego StringDouble wartość 1000 na wartość, ponieważ 1000 jest reprezentowane inaczej przez różne kultury.
Zwraca
Element Object zawierający wartość zwracaną wywołanej metody.
Wyjątki
Konwencja wywoływania nie jest obsługiwana VarArgs .
Liczba elementów w elemecie parameters
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 utworzona z ustawioną wartością skipVisibility
false
, ale metoda dynamiczna uzyskuje dostęp do elementów członkowskich, które nie public
są lub internal
(Friend
w Visual Basic).
-lub-
Metoda dynamiczna jest hostowana anonimowo i została utworzona z ustawioną wartością skipVisibility
false
, ale uzyskuje dostęp do elementów członkowskich, które nie public
są .
-lub-
Metoda dynamiczna zawiera nieweryfikowalny kod. Zobacz sekcję "Weryfikacja" w uwagach dotyczących DynamicMethodelementu .
Przykłady
Poniższy przykład kodu wywołuje metodę dynamiczną z dokładnym powiązaniem przy użyciu kultury US-English. Ten przykład kodu jest częścią większego przykładu udostępnionego DynamicMethod dla klasy .
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)
Uwagi
Oprócz wymienionych wyjątków kod wywołujący powinien być przygotowany do przechwytywania wyjątków zgłaszanych przez metodę dynamiczną.
Wykonywanie metody dynamicznej za pomocą delegata utworzonego CreateDelegate przez metodę jest bardziej wydajne niż wykonywanie jej za Invoke pomocą metody .
Invoke Wywołanie metody lub CreateDelegate metody 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 wyjątek.
Wszystkie metody dynamiczne są statyczne, więc obj
parametr jest zawsze ignorowany. Aby traktować metodę dynamiczną tak, jakby była to metoda wystąpienia, użyj CreateDelegate(Type, Object) przeciążenia, które przyjmuje wystąpienie obiektu.
Jeśli metoda dynamiczna nie ma parametrów, wartość parametru parameters
powinna mieć null
wartość . 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.
Uwaga
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 nie są wymagane dla anonimowo hostowanych metod dynamicznych, które są tworzone przy użyciu parametru ustawionego restrictedSkipVisibility
na false
wartość . Z drugiej strony, jeśli utworzysz metodę z restrictedSkipVisibility
ustawioną wartością true
, aby uzyskać dostęp do ukrytego elementu członkowskiego zestawu docelowego, metoda spowoduje żądanie uprawnień zestawu docelowego plus ReflectionPermission z flagą ReflectionPermissionFlag.MemberAccess .
Uwaga
Przed .NET Framework 2.0 ta metoda jest wymagana ReflectionPermission z flagą MemberAccess .