Nyelv

DynamicMethod.Invoke Metódus

Definíció

Meghívja a dinamikus metódust a megadott paraméterekkel, a megadott kötés megkötései mellett, a megadott kulturális adatokkal.

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

Paraméterek

obj
Object

Ezt a paramétert a rendszer figyelmen kívül hagyja a dinamikus metódusok esetében, mert statikusak. Adja meg a következőt: null.

invokeAttr
BindingFlags

Értékek bitenkénti kombinációja BindingFlags .

binder
Binder

Olyan Binder objektum, amely lehetővé teszi az argumentumtípusok kötését, kényszerítését, a tagok meghívását és az objektumok visszaverésen keresztüli lekérését MemberInfo . Ha binder igen null, akkor a rendszer az alapértelmezett kötőanyagot használja. További részletekért lásd: Binder.

parameters
Object[]

Argumentumlista. Ez az argumentumok tömbje, amelynek száma, sorrendje és típusa megegyezik a meghívandó metódus paramétereivel. Ha nincsenek paraméterek, ennek a paraméternek kell lennie null.

culture
CultureInfo

A típusok kényszerítésének szabályozására használt példány CultureInfo . Ebben az esetben nulla rendszer az CultureInfo aktuális szálat használja. Ez az információ például az 1000 String értéket képviselő értékek helyes átalakításához Double szükséges, mivel az 1000-et különböző kultúrák jelölik.

Válaszok

A Object meghívott metódus visszatérési értékét tartalmazó.

Kivételek

A VarArgs hívási konvenció nem támogatott.

A benne lévő parameters elemek száma nem egyezik meg a dinamikus metódus paramétereinek számával.

Egy vagy több elem parameters típusa nem egyezik meg a dinamikus metódus megfelelő paraméterének típusával.

A dinamikus metódus egy modulhoz van társítva, nincs névtelenül üzemeltetve, és skipVisibilityfalse értékre van állítva, de a dinamikus metódus olyan tagokhoz fér hozzá, amelyek nem public vagy internal (Friend Visual Basic).

-vagy-

A dinamikus metódus névtelenül van üzemeltetve, és a következő beállítással skipVisibilityfalselett létrehozva, de olyan tagokhoz fér hozzá, amelyek nem public.

-vagy-

A dinamikus metódus nem ellenőrizhető kódot tartalmaz. Lásd a megjegyzések »Verifikáció« szakaszát DynamicMethod.

Példák

Az alábbi példa egy dinamikus metódust hív meg pontos kötéssel az amerikai angol kultúra használatával. Ez a példakód egy nagyobb, az DynamicMethod osztályhoz tartozó példa része.

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)

Megjegyzések

A felsorolt kivételek mellett a hívási kódnak készen kell állnia arra, hogy elfogja a dinamikus módszer által kidobott kivételeket.

A metódus által CreateDelegate létrehozott meghatalmazottal történő dinamikus metódus végrehajtása hatékonyabb, mint a Invoke metódussal való végrehajtás.

A Invoke metódus vagy a CreateDelegate metódus meghívása befejezi a dinamikus metódust. A rendszer figyelmen kívül hagyja a dinamikus módszer módosítására tett további kísérleteket, például a paraméterdefiníciók módosítását vagy a Microsoft köztes nyelvének (MSIL) kibocsátását; nincs kivétel.

Minden dinamikus metódus statikus, ezért a obj paramétert a rendszer mindig figyelmen kívül hagyja. Ha egy dinamikus metódust úgy szeretne kezelni, mintha példánymetódus lenne, akkor használja azt az CreateDelegate(Type, Object) túlterhelést, amelyhez egy objektumpéldány szükséges.

Ha a dinamikus metódus nem rendelkezik paraméterekkel, akkor az értéknek parameters a következőnek kell lennie null: . Ellenkező esetben a paramétertömb elemeinek számának, típusának és sorrendjének meg kell egyeznie a dinamikus metódus paramétereinek számával, típusával és sorrendjének.

Note

A Invoke(Object, Object[]) osztályból örökölt MethodBase metódus túlterhelés hívja meg ezt a metódus-túlterhelést, így az előző megjegyzések mindkét metódustúlterhelésre érvényesek.

Ez a módszer nem igényel közvetlenül engedélyeket, de a dinamikus metódus meghívása a metódustól függően biztonsági igényeket eredményezhet. Például a névtelenül üzemeltetett dinamikus metódusokra nem vonatkoznak követelmények, amikor a restrictedSkipVisibility paramétert false beállítással hozzák létre. Ha viszont létrehoz egy metódust restrictedSkipVisibility úgy, hogy true az hozzáférhessen egy célszerelvény rejtett tagához, a metódus a célszerelvény ReflectionPermission engedélyeinek és a ReflectionPermissionFlag.MemberAccess jelölőnek az igényét fogja eredményezni.

A következőre érvényes:

Lásd még