DynamicMethod.Invoke Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 null
tento parametr .
- culture
- CultureInfo
Instance CultureInfo slouží k řízení převodu typů. Pokud je null
to , 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 .