DynamicMethod.Invoke Metoda

Definice

Vyvolá dynamickou metodu pomocí zadaných parametrů v rámci omezení zadaného pořadače se zadanými informacemi jazykové verze.

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

Tento parametr je ignorován pro dynamické metody, protože jsou statické. Zadejte null.

invokeAttr
BindingFlags

Bitové kombinace BindingFlags hodnot.

binder
Binder

Objekt Binder , který umožňuje vazby, převod typů argumentů, vyvolání členů a načtení MemberInfo objektů prostřednictvím reflexe. Pokud je bindernull, použije se výchozí pořadač. Další podrobnosti najdete tady: Binder.

parameters
Object[]

Seznam argumentů Jedná se o pole argumentů se stejným číslem, pořadím a typem jako parametry metody, které se mají vyvolat. Pokud neexistují žádné parametry, tento parametr by měl být null.

culture
CultureInfo

Instance CultureInfo sloužící k řízení převodu typů. V takovém případě nullCultureInfo se použije aktuální vlákno. Tyto informace jsou například potřeba k správnému převodu String hodnoty, která představuje hodnotu 1000 Double , protože 1000 je reprezentována odlišně různými jazykovými verzemi.

Návraty

A Object obsahující návratovou hodnotu vyvolané metody.

Výjimky

Konvence VarArgs volání není podporována.

Počet prvků neodpovídá parameters počtu parametrů v dynamické metodě.

Typ jednoho nebo více prvků parameters neodpovídá typu odpovídajícího parametru dynamické metody.

Dynamická metoda je přidružená k modulu, není anonymně hostovaná a byla vytvořena pomocí skipVisibility nastavena na false, ale dynamická metoda přistupuje k členům, kteří nejsou public nebo internal (Friend v Visual Basic).

nebo

Dynamická metoda je anonymně hostována a byla vytvořena s nastavenou skipVisibility hodnotou false, ale přistupuje k členům, které nejsou public.

nebo

Dynamická metoda obsahuje neověřitelný kód. Viz část "Ověření" v poznámkách pro DynamicMethod.

Příklady

Následující příklad kódu volá dynamickou metodu s přesnou vazbou a použitím kulturního kontextu americké angličtiny. Tento příklad kódu je součástí většího příkladu uvedeného pro třídu 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)

Poznámky

Kromě uvedených výjimek by měl být volající kód připraven zachytit všechny výjimky vyvolané dynamickou metodou.

Provádění dynamické metody s delegátem vytvořeným metodou CreateDelegate je efektivnější než jeho spuštění s metodou Invoke .

Volání metody Invoke nebo metody CreateDelegate dokončí dynamickou metodu. Jakékoli další pokusy o změnu dynamické metody, jako je úprava definic parametrů nebo emitování více kódu MSIL (Microsoft Intermediate Language), se ignorují; není vyvolána žádná výjimka.

Všechny dynamické metody jsou statické, takže obj parametr je vždy ignorován. Pokud chcete zacházet s dynamickou metodou, jako by se jednalo o metodu instance, použijte CreateDelegate(Type, Object) přetížení, které přebírá instanci objektu.

Pokud dynamická metoda nemá žádné parametry, parameters hodnota by měla být null. V opačném případě by číslo, typ a pořadí prvků v matici parametrů mělo být stejné jako číslo, typ a pořadí parametrů dynamické metody.

Note

Toto přetížení metody je voláno přetížením metody, které je zděděno z třídy Invoke(Object, Object[]), takže předchozí poznámky platí pro obě přetížení.

Tato metoda nevyžaduje oprávnění přímo, ale vyvolání dynamické metody může vést k požadavkům na zabezpečení v závislosti na metodě. Například nejsou provedeny žádné požadavky pro anonymně hostované dynamické metody, které jsou vytvořeny s parametrem nastaveným restrictedSkipVisibility na false. Na druhou stranu pokud vytvoříte metodu s restrictedSkipVisibility nastaveným true nastavením tak, aby mohl přistupovat ke skrytému členu cílového sestavení, metoda způsobí poptávku po oprávněních cílového sestavení plus ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess .

Platí pro

Viz také