DynamicMethod.Invoke Metod

Definition

Anropar den dynamiska metoden med de angivna parametrarna, under begränsningarna för det angivna bindemedlet, med den angivna kulturinformationen.

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

Parametrar

obj
Object

Den här parametern ignoreras för dynamiska metoder eftersom de är statiska. Ange null.

invokeAttr
BindingFlags

En bitvis kombination av BindingFlags värden.

binder
Binder

Ett Binder objekt som möjliggör bindning, tvång av argumenttyper, anrop av medlemmar och hämtning av MemberInfo objekt genom reflektion. Om binder är nullanvänds standardbindningen. Mer information finns i Binder.

parameters
Object[]

En argumentlista. Det här är en matris med argument med samma tal, ordning och typ som parametrarna för den metod som ska anropas. Om det inte finns några parametrar bör den här parametern vara null.

culture
CultureInfo

En instans av CultureInfo som används för att styra tvång av typer. Om detta är nullCultureInfo används för den aktuella tråden. Den här informationen behövs till exempel för att konvertera en String som representerar 1 000 till ett Double värde korrekt, eftersom 1 000 representeras på olika sätt av olika kulturer.

Returer

En Object som innehåller returvärdet för den anropade metoden.

Undantag

Anropskonventionen VarArgs stöds inte.

Antalet element i parameters matchar inte antalet parametrar i den dynamiska metoden.

Typen av ett eller flera element i parameters matchar inte typen av motsvarande parameter för den dynamiska metoden.

Den dynamiska metoden är associerad med en modul, är inte anonymt värdbaserad och skapades med skipVisibility inställd på false, men den dynamiska metoden kommer åt medlemmar som inte är public eller internal (Friend i Visual Basic).

-eller-

Den dynamiska metoden är anonymt värdhanterad och skapades med skipVisibility inställd på , men den har åtkomst till falsemedlemmar som inte publicär .

-eller-

Den dynamiska metoden innehåller icke-verifierad kod. Se avsnittet "Verifiering" i Kommentarer för DynamicMethod.

Exempel

I följande kodexempel anropas en dynamisk metod med exakt bindning med hjälp av amerikansk-engelsk kultur. Det här kodexemplet är en del av ett större exempel för DynamicMethod klassen.

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)

Kommentarer

Förutom de undantag som anges bör den anropande koden vara beredd att fånga eventuella undantag som genereras av den dynamiska metoden.

Att köra en dynamisk metod med en delegat som skapats av CreateDelegate metoden är effektivare än att köra den med Invoke metoden.

Anrop av Invoke metoden eller CreateDelegate metoden slutför den dynamiska metoden. Alla ytterligare försök att ändra den dynamiska metoden, till exempel att ändra parameterdefinitioner eller generera fler Microsoft-mellanliggande språk (MSIL), ignoreras. Inget undantag utlöses.

Alla dynamiska metoder är statiska, så parametern obj ignoreras alltid. Om du vill behandla en dynamisk metod som om den vore en instansmetod använder du den CreateDelegate(Type, Object) överlagring som tar en objektinstans.

Om den dynamiska metoden inte har några parametrar ska värdet parameters för vara null. Annars ska antalet, typen och ordningen på elementen i parametermatrisen vara identiska med parametrarnas tal, typ och ordning för den dynamiska metoden.

Note

Den här metodens överlagring anropas av den Invoke(Object, Object[]) metodöverlagring som ärvts från MethodBase klassen, så föregående kommentarer gäller för båda överlagringarna.

Den här metoden kräver inte behörigheter direkt, men om du anropar den dynamiska metoden kan det leda till säkerhetskrav, beroende på metoden. Till exempel ställs inga krav på anonymt värdbaserade dynamiska metoder som skapas med parametern inställd på restrictedSkipVisibilityfalse. Å andra sidan, om du skapar en metod med restrictedSkipVisibility inställd på så att true den kan komma åt en dold medlem i en målsammansättning, kommer metoden att orsaka ett krav på behörigheterna för målsammansättningen plus ReflectionPermission med ReflectionPermissionFlag.MemberAccess flaggan.

Gäller för

Se även