DynamicMethod.Invoke Methode

Definitie

Roept de dynamische methode aan met behulp van de opgegeven parameters, onder de beperkingen van de opgegeven binder, met de opgegeven cultuurgegevens.

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);
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

Parameters

obj
Object

Deze parameter wordt genegeerd voor dynamische methoden, omdat deze statisch zijn. Geef null op.

invokeAttr
BindingFlags

Een bitsgewijze combinatie van BindingFlags waarden.

binder
Binder

Een Binder object dat de binding, dwang van argumenttypen, het aanroepen van leden en het ophalen van MemberInfo objecten via reflectie mogelijk maakt. Als binder dat het is null, wordt de standaardbinding gebruikt. Zie Binder voor meer informatie.

parameters
Object[]

Een lijst met argumenten. Dit is een matrix met argumenten met hetzelfde getal, dezelfde volgorde en type als de parameters van de methode die moet worden aangeroepen. Als er geen parameters zijn, moet deze parameter zijn null.

culture
CultureInfo

Een exemplaar dat CultureInfo wordt gebruikt om de dwang van typen te bepalen. Als dit het is null, wordt het CultureInfo voor de huidige thread gebruikt. Deze informatie is bijvoorbeeld nodig om een String waarde van 1000 correct te converteren naar een Double waarde, omdat 1000 anders wordt weergegeven door verschillende culturen.

Retouren

Een Object met de retourwaarde van de aangeroepen methode.

Uitzonderingen

De VarArgs oproepconventie wordt niet ondersteund.

Het aantal elementen in parameters komt niet overeen met het aantal parameters in de dynamische methode.

Het type van een of meer elementen komt parameters niet overeen met het type van de bijbehorende parameter van de dynamische methode.

De dynamische methode is gekoppeld aan een module, wordt niet anoniem gehost en is samengesteld met skipVisibility ingesteld op false, maar de dynamische methode heeft toegang tot leden die niet public of internal (Friend in Visual Basic).

– of –

De dynamische methode wordt anoniem gehost en is samengesteld met skipVisibility ingesteld op false, maar heeft toegang tot leden die dat niet publiczijn .

– of –

De dynamische methode bevat niet-verifieerbare code. Zie de sectie 'Verificatie' in Opmerkingen voor DynamicMethod.

Voorbeelden

In het volgende codevoorbeeld wordt een dynamische methode aangeroepen met exacte binding, met behulp van de US-English cultuur. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de DynamicMethod klasse.

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)

Opmerkingen

Naast de vermelde uitzonderingen moet de aanroepende code worden voorbereid om eventuele uitzonderingen te ondervangen die door de dynamische methode worden gegenereerd.

Het uitvoeren van een dynamische methode met een gemachtigde die door de CreateDelegate methode is gemaakt, is efficiënter dan het uitvoeren ervan met de Invoke methode.

Het aanroepen van de Invoke methode of de CreateDelegate methode voltooit de dynamische methode. Elke verdere poging om de dynamische methode te wijzigen, zoals het wijzigen van parameterdefinities of het emitteren van meer Microsoft Intermediate Language (MSIL), wordt genegeerd; er wordt geen uitzondering opgeworpen.

Alle dynamische methoden zijn statisch, dus de obj parameter wordt altijd genegeerd. Als u een dynamische methode wilt behandelen alsof het een instantiemethode is, gebruikt u de CreateDelegate(Type, Object) overload die een objectinstantie gebruikt.

Als de dynamische methode geen parameters heeft, moet de waarde parameters zijn null. Anders moeten het aantal, het type en de volgorde van elementen in de parametersmatrix identiek zijn aan het aantal, het type en de volgorde van parameters van de dynamische methode.

Note

Deze overbelasting van de methode wordt aangeroepen door de overbelasting van de Invoke(Object, Object[]) methode die is overgenomen van de MethodBase klasse, zodat de voorgaande opmerkingen van toepassing zijn op beide overbelastingen.

Deze methode vereist geen machtigingen rechtstreeks, maar het aanroepen van de dynamische methode kan leiden tot beveiligingsvereisten, afhankelijk van de methode. Er worden bijvoorbeeld geen eisen gesteld voor anoniem gehoste dynamische methoden die worden gemaakt met de restrictedSkipVisibility parameter die is ingesteld op false. Als u daarentegen een methode maakt waarop restrictedSkipVisibility deze is ingesteld true , zodat deze toegang heeft tot een verborgen lid van een doelassembly, veroorzaakt de methode een vraag naar de machtigingen van de doelassembly plus ReflectionPermission met de ReflectionPermissionFlag.MemberAccess vlag.

Van toepassing op

Zie ook