TypeDelegator.InvokeMember Metoda

Definice

Vyvolá zadaný člen. Metoda, která má být vyvolána, musí být přístupná a poskytovat nejpřesnější shodu se zadaným seznamem argumentů v rámci omezení zadaných vazeb a vyvolání atributů.

public:
 override System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public override object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
public override object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

Parametry

name
String

Název člena, který se má vyvolat. Může se jednat o konstruktor, metodu, vlastnost nebo pole. Pokud je předán prázdný řetězec (""), je vyvolán výchozí člen.

invokeAttr
BindingFlags

Atribut vyvolání Musí to být jedna z následujících BindingFlags možností: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, nebo SetProperty. Je nutné zadat vhodný atribut vyvolání. Pokud má být vyvolán statický člen, Static musí být příznak nastaven.

binder
Binder

Objekt, který umožňuje vazbu, převod typů argumentů, vyvolání členů a načtení MemberInfo objektů prostřednictvím reflexe. Pokud je bindernull, použije se výchozí pořadač. Viz Binder.

target
Object

Objekt, na kterém se má vyvolat zadaný člen.

args
Object[]

Pole typu Object , které obsahuje číslo, pořadí a typ parametrů člena, který se má vyvolat. Pokud args obsahuje neinicializovaný Objectobjekt , je považován za prázdný, který s výchozím pořadačem lze rozšířit na 0, 0,0 nebo řetězec.

modifiers
ParameterModifier[]

Pole typu ParameterModifier , který má stejnou délku jako args, s prvky, které představují atributy přidružené k argumentům člena, který má být vyvolán. Parametr má přidružené atributy v podpisu člena. Pro ByRef, použití ParameterModifier.ByRefa pro žádné, použijte ParameterModifier.None. Výchozí pořadač s těmito funkcemi přesně odpovídá. Atributy, jako In jsou a InOut nejsou použity ve vazbě, a lze je zobrazit pomocí ParameterInfo.

culture
CultureInfo

Instance CultureInfo sloužící k řízení převodu typů. To je nutné například k převodu řetězce, který představuje hodnotu 1000 Double , protože 1000 je reprezentován odlišně různými jazykovými verzemi. Pokud culture ano null, CultureInfo použije se pro aktuální vlákno CultureInfo .

namedParameters
String[]

Řetězcové pole obsahující názvy parametrů, které odpovídají od nuly prvku, s polem args . V poli nesmí být žádné díry. Pokud args. Length je větší než namedParameters. Length, zbývající parametry jsou vyplněny v pořadí.

Návraty

Představuje Object návratovou hodnotu vyvolaného člena.

Atributy

Poznámky

Metoda se vyvolá, pokud jsou splněny obě následující podmínky:

  • Počet parametrů v deklaraci metody se rovná počtu argumentů v zadaném seznamu argumentů (pokud nejsou pro člen definovány výchozí argumenty).

  • Typ jednotlivých argumentů lze převést pořadačem na typ parametru.

Pořadač najde všechny odpovídající metody. Tyto metody jsou nalezeny na základě typu požadované vazby (BindingFlags.MethodInvokeBindingFlags.GetPropertiesatd.). Sada metod je filtrována podle názvu, počtu argumentů a sady modifikátorů vyhledávání definovaných v pořadači.

Po výběru metody se vyvolá. Přístupnost je v tomto okamžiku zaškrtnutá. Hledání může řídit, která sada metod se prohledá na základě atributu přístupnosti přidruženého k metodě. Metoda Binder.BindToMethod je zodpovědná za výběr metody, která se má vyvolat. Výchozí pořadač vybere nejpřesnější shodu.

Note

Omezení přístupu se ignorují pro plně důvěryhodný kód. To znamená, že k soukromým konstruktorům, metodám, polím a vlastnostem lze přistupovat a vyvolat pomocí reflexe, kdykoli je kód plně důvěryhodný.

V současné době InvokeMember provádí sémantiku reflexe Microsoft .NET Framework pro každý typ objektu.

Pokud je člen určený názvem pole a BindingFlags.GetField příznak je nastaven na invokeAttr, args pole určuje prvky, jejichž hodnoty mají být vráceny. Například následující volání prostřednictvím Type objektu t vrátí hodnotu prvního prvku pole řetězce MyArray, který je členem volajícího objektu:

String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});

Můžete použít InvokeMember k nastavení jednoho nebo více prvků pole členů. Všechny prvky jsou nastaveny na stejnou hodnotu. Pole args musí být naformátované následujícím způsobem:

{index1,
    index2,, value}

Pokud chcete například nastavit první člen MyArray z předchozího příkladu, syntaxe je následující:

t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new
    Variant[]{0,"Updated"});

Platí pro

Viz také