Sdílet prostřednictvím


DynamicMethod.Invoke Metoda

Definice

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

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 se u dynamických metod ignoruje, protože jsou statické. Zadejte null.

invokeAttr
BindingFlags

Bitové kombinace BindingFlags hodnot.

binder
Binder

Objekt Binder , který umožňuje vazbu, převod typů argumentů, vyvolání členů a načtení MemberInfo objektů prostřednictvím reflexe. Pokud binder je null, 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á má být vyvolána. Pokud neexistují žádné parametry, měl by být nulltento parametr .

culture
CultureInfo

Instance CultureInfo slouží k řízení převodu typů. Pokud je nullto , použije se CultureInfo pro aktuální vlákno . Tyto informace jsou například potřeba ke správnému převodu objektu String , který představuje hodnotu 1000, na Double hodnotu, protože hodnota 1000 je různě reprezentována různými jazykovou verzí.

Návraty

Obsahující Object návratovou hodnotu vyvolané metody.

Výjimky

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

Počet prvků v parameters souboru neodpovídá 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žena k modulu, není anonymně hostovaná a byla vytvořena s skipVisibility nastavením na false, ale dynamická metoda přistupuje ke členům, které nejsou public nebo internal (Friend v jazyce Visual Basic).

-nebo-

Dynamická metoda je hostovaná anonymně a byla vytvořena s nastavenou skipVisibility na false, ale přistupuje ke členům, kteří nejsou public.

-nebo-

Dynamická metoda obsahuje neověřitelný kód. Viz část "Ověření" v části Poznámky pro DynamicMethod.

Příklady

Následující příklad kódu vyvolá dynamickou metodu s přesnou vazbou pomocí US-English jazykové verze. Tento příklad kódu je součástí většího příkladu DynamicMethod pro třídu .

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)

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.

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

Volání metody Invoke nebo CreateDelegate metody dokončí dynamickou metodu. Jakékoli další pokusy o změnu dynamické metody, jako je například úprava definic parametrů nebo generování více zprostředkující jazyk (MSIL) Společnosti Microsoft, jsou ignorovány; nevyvolá se žádná výjimka.

Všechny dynamické metody jsou statické, takže parametr obj se vždy ignoruje. Chcete-li zacházet s dynamickou metodou, jako by to byla metoda instance, použijte CreateDelegate(Type, Object) přetížení, které přebírá instanci objektu.

Pokud dynamická metoda nemá žádné parametry, hodnota by parameters měla být null. V opačném případě by počet, typ a pořadí prvků v poli parametrů měly být identické s číslem, typem a pořadím parametrů dynamické metody.

Poznámka

Toto přetížení metody je voláno přetížením Invoke(Object, Object[]) metody zděděným z MethodBase třídy , 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 závislosti na metodě vést k požadavkům na zabezpečení. Například nejsou vytvářeny žádné požadavky na anonymně hostované dynamické metody, které jsou vytvořeny s parametrem nastaveným restrictedSkipVisibility na false. Na druhou stranu, pokud vytvoříte metodu s restrictedSkipVisibility nastavenou na true , aby mohl přistupovat ke skrytému členu cílového sestavení, metoda způsobí požadavek na oprávnění cílového sestavení plus ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess .

Poznámka

Před rozhraním .NET Framework 2.0 se tato metoda vyžaduje ReflectionPermission s příznakem MemberAccess .

Platí pro

Viz také