System.Reflection.Emit.DynamicMethod.Invoke metódus

Megjegyzés:

Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.

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.

Megjegyzés:

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. Másrészt, ha olyan metódust hoz létre, amelynek restrictedSkipVisibility értéke true, így hozzáférhet a célszerelvény rejtett tagjához, akkor a metódus a célszerelvény engedélyeinek követelését okozza ReflectionPermission és a ReflectionPermissionFlag.MemberAccess jelzővel.

Examples

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)