DynamicMethod.Invoke Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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.