Sdílet prostřednictvím


Type.InvokeMember Metoda

Definice

Vyvolá konkrétního člena aktuálního Type.

Přetížení

Name Description
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Při přepsání v odvozené třídě vyvolá zadaný člen pomocí zadaných vazeb omezení a odpovídající zadaný seznam argumentů, modifikátory a jazyková verze.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Vyvolá zadaný člen pomocí zadaných omezení vazby a porovnává zadaný seznam argumentů a jazykovou verzi.

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Vyvolá zadaný člen pomocí zadaných omezení vazby a porovnává zadaný seznam argumentů.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Při přepsání v odvozené třídě vyvolá zadaný člen pomocí zadaných vazeb omezení a odpovídající zadaný seznam argumentů, modifikátory a jazyková verze.

public:
 abstract 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 abstract 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 abstract 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 abstract 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 abstract 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)>]
abstract member 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)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride 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

Řetězec obsahující název konstruktoru, metody, vlastnosti nebo člena pole, který se má vyvolat.

nebo

Prázdný řetězec ("") pro vyvolání výchozího člena.

nebo

Pro IDispatch členy řetězec představující DispID, například "[DispID=3]".

invokeAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují způsob provedení hledání. Přístup může být jedním z BindingFlags těchto typů, například Public, NonPublic, PrivateInvokeMethod, GetField, atd. Typ vyhledávání není nutné zadat. Pokud je typ vyhledávání vynechán, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static použije se.

binder
Binder

Objekt, který definuje sadu vlastností a umožňuje vazbu, která může zahrnovat výběr přetížené metody, převod typů argumentů a vyvolání člena prostřednictvím reflexe.

nebo

Nulový odkaz (Nic v Visual Basic) pro použití DefaultBinder. Všimněte si, že explicitní definování objektu Binder může být vyžadováno pro úspěšné vyvolání přetížení metody s proměnnými argumenty.

target
Object

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

args
Object[]

Pole obsahující argumenty, které se mají předat členu, který se má vyvolat.

modifiers
ParameterModifier[]

Pole ParameterModifier objektů představující atributy přidružené k odpovídajícímu prvku v args poli. Přidružené atributy parametru jsou uloženy v podpisu člena.

Výchozí pořadač zpracovává tento parametr pouze při volání komponenty COM.

culture
CultureInfo

Objekt CultureInfo představující národní prostředí globalizace, které se má použít, což může být nezbytné pro převody specifické pro národní prostředí, například převod číselného řetězce na double.

nebo

Odkaz na hodnotu null (Nothing v Visual Basic) pro použití CultureInfo aktuálního vlákna.

namedParameters
String[]

Pole obsahující názvy parametrů, kterým jsou předány hodnoty v args poli.

Návraty

Objekt představující návratovou hodnotu vyvolaného členu.

Implementuje

Atributy

Výjimky

invokeAttr neobsahuje CreateInstance a name je null.

args a modifiers nemají stejnou délku.

nebo

invokeAttr není platný BindingFlags atribut.

nebo

invokeAttr neobsahuje jeden z následujících příznaků vazby: InvokeMethod, CreateInstance, GetField, SetField, , GetPropertynebo SetProperty.

nebo

invokeAttrobsahuje kombinaci s InvokeMethodCreateInstance , , SetFieldGetField, GetProperty, nebo SetProperty.

nebo

invokeAttr obsahuje oba GetField a SetField.

nebo

invokeAttr obsahuje oba GetProperty a SetProperty.

nebo

invokeAttr obsahuje InvokeMethod kombinaci s SetField nebo SetProperty.

nebo

invokeAttr obsahuje SetField a args má více než jeden prvek.

nebo

Pojmenované pole parametrů je větší než pole argumentů.

nebo

Tato metoda je volána objektu COM a jeden z následujících příznaků vazby nebyl předán: BindingFlags.InvokeMethod, , BindingFlags.GetPropertyBindingFlags.SetProperty, , BindingFlags.PutDispPropertynebo BindingFlags.PutRefDispProperty.

nebo

Jedno z pojmenovaných polí parametrů obsahuje řetězec, který je null.

Zadaný člen je inicializátor třídy.

Pole nebo vlastnost nelze najít.

Nelze nalézt žádnou metodu, která odpovídá argumenty v args.

nebo

Nebyl nalezen žádný člen, který obsahuje názvy argumentů zadané v namedParameters.

nebo

Aktuální Type objekt představuje typ, který obsahuje parametry otevřeného typu, to znamená, ContainsGenericParameters vrací true.

Zadaný člen nelze vyvolat dne target.

Více než jedna metoda odpovídá kritériím vazby.

Metoda reprezentovaná name jedním nebo více nespecifikovanými parametry obecného typu. To znamená, že vlastnost metody ContainsGenericParameters vrátí true.

Poznámky

InvokeMember volá člena konstruktoru nebo člen metody, získá nebo nastaví člen vlastnosti, získá nebo nastaví člen datového pole, nebo získá nebo nastaví prvek maticového členu.

Poznámka:

Nelze použít InvokeMember k vyvolání obecné metody.

Při vyvolání člena IDispatch můžete místo názvu člena zadat ID dispID pomocí formátu řetězce "[DispID=##]". Pokud je například Id DispID myComMethod 3, můžete místo "MyComMethod" zadat řetězec "[DispID=3]". Vyvolání člena pomocí DispID je rychlejší než vyhledání člena podle jména. Ve složitých scénářích agregace je dispID někdy jediným způsobem, jak vyvolat požadovaný člen.

I když výchozí pořadač nezpracovává nebo (a parametry), můžete použít abstraktní System.Reflection.Binder třídu k zápisu vlastního pořadače, který zpracovává modifiers a culture.culturemodifiersCultureInfoParameterModifier ParameterModifier se používá pouze při volání přes COM interop a jsou zpracovávány pouze parametry předané odkazem.

Každý parametr v namedParameters poli získá hodnotu v odpovídajícím prvku pole args . Pokud je délka args větší než délka , předají se zbývající hodnoty argumentů namedParametersv pořadí.

Pole namedParameters lze použít ke změně pořadí argumentů ve vstupním poli. Například vzhledem k metodě M(string a, int b) (M(ByVal a As String, ByVal b As Integer) v Visual Basic) a vstupní matici { 42, "x" } lze vstupní matici předat beze změny args, pokud je pole { "b", "a" } zadané pro namedParameters.

BindingFlags Následující příznaky filtru lze použít k definování členů, které mají být zahrnuty do vyhledávání:

  • Zadejte BindingFlags.Public , aby se do hledání zahrnuli veřejné členy.

  • Zadejte BindingFlags.NonPublic , aby do vyhledávání zahrnuli neveřejné členy (tj. soukromé, interní a chráněné členy).

  • Zadejte BindingFlags.FlattenHierarchy , aby se do hierarchie zahrnuli statické členy.

Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:

  • BindingFlags.IgnoreCase ignorovat případ name.

  • BindingFlags.DeclaredOnly hledat pouze členy deklarované na Type, nikoli členy, které byly jednoduše zděděny.

BindingFlags Následující příznaky vyvolání se dají použít k označení akce, kterou má člen provést:

  • CreateInstance vyvolání konstruktoru. Vlastnost name je ignorována. Není platné s jinými příznaky vyvolání.

  • InvokeMethod vyvolání metody, ale ne konstruktoru nebo inicializátoru typu. Není platné s SetField nebo SetProperty. Pokud InvokeMethod je zadán sám, BindingFlags.Public, , BindingFlags.Instancea BindingFlags.Static jsou automaticky zahrnuty.

  • GetField k získání hodnoty pole. Není platné s SetField.

  • SetField a nastavte hodnotu pole. Není platné s GetField.

  • GetProperty získat vlastnost. Není platné s SetProperty.

  • SetProperty nastavte vlastnost. Není platné s GetProperty.

Další informace naleznete na System.Reflection.BindingFlags.

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 args matici (pokud nejsou pro člen definovány výchozí argumenty a BindingFlags.OptionalParamBinding není zadán).

  • Typ každého argumentu lze převést pořadačem na typ parametru.

Pořadač najde všechny odpovídající metody. Tyto metody se nacházejí na základě typu požadované vazby (BindingFlags hodnoty InvokeMethod, GetPropertyatd.). 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.BindToMethodBinder třídy je zodpovědná za výběr metody, která se má vyvolat. Výchozí pořadač vybere nejpřesnější shodu.

InvokeMember lze použít k vyvolání metod s parametry, které mají výchozí hodnoty. K vytvoření vazby k těmto metodám je nutné BindingFlags.OptionalParamBinding zadat Reflexe. U parametru, který má výchozí hodnotu, můžete zadat jinou hodnotu nebo zadat Missing.Value , aby se použila výchozí hodnota.

Představte si například metodu, jako je MyMethod(int x, float y = 2.0). Chcete-li vyvolat tuto metodu pouze s prvním argumentem jako MyMethod(4), předejte jeden z výše uvedených vazeb příznaky a předejte dva argumenty, konkrétně 4 pro první argument a Missing.Value druhý argument. Pokud nepoužíváte Missing.Value, nesmíte vynechat volitelné parametry s metodou Invoke . Pokud to musíte udělat, použijte InvokeMember místo toho.

Omezení přístupu jsou ignorována 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 při System.Reflection každém plně důvěryhodném kódu.

Pole můžete Type.InvokeMember nastavit na určitou hodnotu zadáním BindingFlags.SetField. Pokud například chcete nastavit pole veřejné instance s názvem F ve třídě C a F je , Stringmůžete použít kód, například:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

Pokud je F, String[]můžete použít kód, například:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

která inicializuje pole F do tohoto nového pole. Můžete také použít Type.InvokeMember k nastavení pozice v matici zadáním indexu hodnoty a následné další hodnoty pomocí kódu, jako je například následující:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

Tím změníte řetězec "z" v poli, které F obsahuje, na řetězec "b".

Poznámka:

Tuto metodu lze použít pro přístup k neveřejným členům, pokud byl volající udělen ReflectionPermission příznakem ReflectionPermissionFlag.RestrictedMemberAccess a pokud je sada udělení nepřístupných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz aspekty zabezpečení pro reflexi.)

Pokud chcete tuto funkci použít, měla by vaše aplikace cílit na .NET Framework 3.5 nebo novější.

Viz také

Platí pro

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Vyvolá zadaný člen pomocí zadaných omezení vazby a porovnává zadaný seznam argumentů a jazykovou verzi.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
[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 object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<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)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object

Parametry

name
String

Řetězec obsahující název konstruktoru, metody, vlastnosti nebo člena pole, který se má vyvolat.

nebo

Prázdný řetězec ("") pro vyvolání výchozího člena.

nebo

Pro IDispatch členy řetězec představující DispID, například "[DispID=3]".

invokeAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují způsob provedení hledání. Přístup může být jedním z BindingFlags těchto typů, například Public, NonPublic, PrivateInvokeMethod, GetField, atd. Typ vyhledávání není nutné zadat. Pokud je typ vyhledávání vynechán, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static použije se.

binder
Binder

Objekt, který definuje sadu vlastností a umožňuje vazbu, která může zahrnovat výběr přetížené metody, převod typů argumentů a vyvolání člena prostřednictvím reflexe.

nebo

Odkaz null (Nothing v Visual Basic) pro použití DefaultBinder. Všimněte si, že explicitní definování objektu Binder může být vyžadováno pro úspěšné vyvolání přetížení metody s proměnnými argumenty.

target
Object

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

args
Object[]

Pole obsahující argumenty, které se mají předat členu, který se má vyvolat.

culture
CultureInfo

Objekt představující národní prostředí globalizace, které se má použít, což může být nezbytné pro převody specifické pro národní prostředí, například převod čísel String na .Double

nebo

Odkaz na hodnotu null (Nothing v Visual Basic) pro použití CultureInfo aktuálního vlákna.

Návraty

Objekt představující návratovou hodnotu vyvolaného členu.

Implementuje

Atributy

Výjimky

invokeAttr neobsahuje CreateInstance a name je null.

invokeAttr není platný BindingFlags atribut.

nebo

invokeAttr neobsahuje jeden z následujících příznaků vazby: InvokeMethod, CreateInstance, GetField, SetField, , GetPropertynebo SetProperty.

nebo

invokeAttrobsahuje kombinaci s InvokeMethodCreateInstance , , SetFieldGetField, GetProperty, nebo SetProperty.

nebo

invokeAttr obsahuje oba GetField a SetField.

nebo

invokeAttr obsahuje oba GetProperty a SetProperty.

nebo

invokeAttr obsahuje InvokeMethod kombinaci s SetField nebo SetProperty.

nebo

invokeAttr obsahuje SetField a args má více než jeden prvek.

nebo

Tato metoda je volána objektu COM a jeden z následujících příznaků vazby nebyl předán: BindingFlags.InvokeMethod, , BindingFlags.GetPropertyBindingFlags.SetProperty, , BindingFlags.PutDispPropertynebo BindingFlags.PutRefDispProperty.

nebo

Jedno z pojmenovaných polí parametrů obsahuje řetězec, který je null.

Zadaný člen je inicializátor třídy.

Pole nebo vlastnost nelze najít.

Nelze nalézt žádnou metodu, která odpovídá argumenty v args.

nebo

Aktuální Type objekt představuje typ, který obsahuje parametry otevřeného typu, to znamená, ContainsGenericParameters vrací true.

Zadaný člen nelze vyvolat dne target.

Více než jedna metoda odpovídá kritériím vazby.

Metoda reprezentovaná name jedním nebo více nespecifikovanými parametry obecného typu. To znamená, že vlastnost metody ContainsGenericParameters vrátí true.

Poznámky

I když výchozí pořadač nezpracovává CultureInfo ( culture parametr), můžete použít abstraktní System.Reflection.Binder třídu k zápisu vlastního pořadače, který zpracovává culture.

Poznámka:

Nelze použít InvokeMember k vyvolání obecné metody.

BindingFlags Následující příznaky filtru lze použít k definování členů, které mají být zahrnuty do vyhledávání:

  • Zadejte BindingFlags.Public , aby se do hledání zahrnuli veřejné členy.

  • Zadejte BindingFlags.NonPublic , aby do vyhledávání zahrnuli neveřejné členy (tj. soukromé, interní a chráněné členy).

  • Zadejte BindingFlags.FlattenHierarchy , aby se do hierarchie zahrnuli statické členy.

Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:

  • BindingFlags.IgnoreCase ignorovat případ name.

  • BindingFlags.DeclaredOnly hledat pouze členy deklarované na Type, nikoli členy, které byly jednoduše zděděny.

BindingFlags Následující příznaky vyvolání se dají použít k označení akce, kterou má člen provést:

  • CreateInstance vyvolání konstruktoru. Vlastnost name je ignorována. Není platné s jinými příznaky vyvolání.

  • InvokeMethod vyvolání metody, ale ne konstruktoru nebo inicializátoru typu. Není platné s SetField nebo SetProperty. Pokud InvokeMethod je zadán sám, BindingFlags.Public, , BindingFlags.Instancea BindingFlags.Static jsou automaticky zahrnuty.

  • GetField k získání hodnoty pole. Není platné s SetField.

  • SetField a nastavte hodnotu pole. Není platné s GetField.

  • GetProperty získat vlastnost. Není platné s SetProperty.

  • SetProperty nastavte vlastnost. Není platné s GetProperty.

Další informace naleznete na System.Reflection.BindingFlags.

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 args matici (pokud nejsou pro člen definovány výchozí argumenty a BindingFlags.OptionalParamBinding není zadán).

  • Typ každého argumentu lze převést pořadačem na typ parametru.

Pořadač najde všechny odpovídající metody. Tyto metody se nacházejí na základě typu požadované vazby (BindingFlags hodnoty InvokeMethod, GetPropertyatd.). 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.BindToMethodBinder třídy je zodpovědná za výběr metody, která se má vyvolat. Výchozí pořadač vybere nejpřesnější shodu.

Omezení přístupu jsou ignorována 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 prostřednictvím reflexe vždy, když je kód plně důvěryhodný.

Pole můžete Type.InvokeMember nastavit na určitou hodnotu zadáním BindingFlags.SetField. Pokud například chcete nastavit pole veřejné instance s názvem F ve třídě C a F je String kód, například:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

Pokud je F, String[]můžete použít kód, například:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

která inicializuje pole F do tohoto nového pole. Můžete také použít Type.InvokeMember k nastavení pozice v matici zadáním indexu hodnoty a následné další hodnoty pomocí kódu, jako je například následující:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

Tím změníte řetězec "z" v poli, které F obsahuje, na řetězec "b".

Při vyvolání člena IDispatch můžete místo názvu člena zadat ID dispID pomocí formátu řetězce "[DispID=##]". Pokud je například Id DispID myComMethod 3, můžete místo "MyComMethod" zadat řetězec "[DispID=3]". Vyvolání člena pomocí DispID je rychlejší než vyhledání člena podle jména. Ve složitých scénářích agregace je dispID někdy jediným způsobem, jak vyvolat požadovaný člen.

Poznámka:

Tuto metodu lze použít pro přístup k neveřejným členům, pokud byl volající udělen ReflectionPermission příznakem ReflectionPermissionFlag.RestrictedMemberAccess a pokud je sada udělení nepřístupných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz aspekty zabezpečení pro reflexi.)

Pokud chcete tuto funkci použít, měla by vaše aplikace cílit na .NET Framework 3.5 nebo novější.

Viz také

Platí pro

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs
Zdroj:
Type.cs

Vyvolá zadaný člen pomocí zadaných omezení vazby a porovnává zadaný seznam argumentů.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
[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 object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<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)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object

Parametry

name
String

Řetězec obsahující název konstruktoru, metody, vlastnosti nebo člena pole, který se má vyvolat.

nebo

Prázdný řetězec ("") pro vyvolání výchozího člena.

nebo

Pro IDispatch členy řetězec představující DispID, například "[DispID=3]".

invokeAttr
BindingFlags

Bitové kombinace hodnot výčtu, které určují způsob provedení hledání. Přístup může být jedním z BindingFlags těchto typů, například Public, NonPublic, PrivateInvokeMethod, GetField, atd. Typ vyhledávání není nutné zadat. Pokud je typ vyhledávání vynechán, BindingFlags.Public | | BindingFlags.InstanceBindingFlags.Static použije se.

binder
Binder

Objekt, který definuje sadu vlastností a umožňuje vazbu, která může zahrnovat výběr přetížené metody, převod typů argumentů a vyvolání člena prostřednictvím reflexe.

nebo

Odkaz null (Nothing v Visual Basic) pro použití DefaultBinder. Všimněte si, že explicitní definování objektu Binder může být vyžadováno pro úspěšné vyvolání přetížení metody s proměnnými argumenty.

target
Object

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

args
Object[]

Pole obsahující argumenty, které se mají předat členu, který se má vyvolat.

Návraty

Objekt představující návratovou hodnotu vyvolaného členu.

Implementuje

Atributy

Výjimky

invokeAttr neobsahuje CreateInstance a name je null.

invokeAttr není platný BindingFlags atribut.

nebo

invokeAttr neobsahuje jeden z následujících příznaků vazby: InvokeMethod, CreateInstance, GetField, SetField, , GetPropertynebo SetProperty.

nebo

invokeAttrobsahuje kombinaci s InvokeMethodCreateInstance , , SetFieldGetField, GetProperty, nebo SetProperty.

nebo

invokeAttr obsahuje oba GetField a SetField.

nebo

invokeAttr obsahuje oba GetProperty a SetProperty.

nebo

invokeAttr obsahuje InvokeMethod kombinaci s SetField nebo SetProperty.

nebo

invokeAttr obsahuje SetField a args má více než jeden prvek.

nebo

Tato metoda je volána objektu COM a jeden z následujících příznaků vazby nebyl předán: BindingFlags.InvokeMethod, , BindingFlags.GetPropertyBindingFlags.SetProperty, , BindingFlags.PutDispPropertynebo BindingFlags.PutRefDispProperty.

nebo

Jedno z pojmenovaných polí parametrů obsahuje řetězec, který je null.

Zadaný člen je inicializátor třídy.

Pole nebo vlastnost nelze najít.

Nelze nalézt žádnou metodu, která odpovídá argumenty v args.

nebo

Aktuální Type objekt představuje typ, který obsahuje parametry otevřeného typu, to znamená, ContainsGenericParameters vrací true.

Zadaný člen nelze vyvolat dne target.

Více než jedna metoda odpovídá kritériím vazby.

.NET Compact Framework tuto metodu v současné době nepodporuje.

Metoda reprezentovaná name jedním nebo více nespecifikovanými parametry obecného typu. To znamená, že vlastnost metody ContainsGenericParameters vrátí true.

Příklady

Následující příklad používá InvokeMember přístup k členům typu.

using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp
    {
        get {return myField;}
        set
        {
            if (value < 1)
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp
{
    static void Main()
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null,
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try
        {
            // Assign the value zero to MyProp. The Property Set
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception.
            t.InvokeMember("MyProp",
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        }
        catch (TargetInvocationException e)
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() !=
                typeof(ArgumentOutOfRangeException))
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}
open System
open System.Reflection

// This sample class has a field, constructor, method, and property.
type MyType() =
    let mutable myField = 0

    member _.MyType(x: int byref) =
        x <- x * 5
    
    override _.ToString() =
        string myField
    
    member _.MyProp
        with get () = myField
        and set value =
            if value < 1 then
                raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
            myField <- value

let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."

// Read and write to a field.
t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"

// Call a method.
let s = t.InvokeMember("ToString",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"

// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
    // Assign the value zero to MyProp. The Property Set
    // throws an exception, because zero is an invalid value.
    // InvokeMember catches the exception, and throws
    // TargetInvocationException. To discover the real cause
    // you must catch TargetInvocationException and examine
    // the inner exception.
    t.InvokeMember("MyProp",
        BindingFlags.DeclaredOnly |||
        BindingFlags.Public ||| BindingFlags.NonPublic |||
        BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
    // If the property assignment failed for some unexpected
    // reason, rethrow the TargetInvocationException.
    if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
        reraise ()
    printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set 
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws 
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception. 
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub
End Class

Poznámky

Poznámka:

Nelze použít InvokeMember k vyvolání obecné metody.

BindingFlags Následující příznaky filtru lze použít k definování členů, které mají být zahrnuty do vyhledávání:

  • Zadejte BindingFlags.Public , aby se do hledání zahrnuli veřejné členy.

  • Zadejte BindingFlags.NonPublic , aby do hledání zahrnuli neveřejné členy (tj. soukromé a chráněné členy).

  • Zadejte BindingFlags.FlattenHierarchy , aby se do hierarchie zahrnuli statické členy.

Ke změně fungování vyhledávání můžete použít následující BindingFlags modifikační příznaky:

  • BindingFlags.IgnoreCase ignorovat případ name.

  • BindingFlags.DeclaredOnly hledat pouze členy deklarované na Type, nikoli členy, které byly jednoduše zděděny.

BindingFlags Následující příznaky vyvolání se dají použít k označení akce, kterou má člen provést:

  • CreateInstance vyvolání konstruktoru. Vlastnost name je ignorována. Není platné s jinými příznaky vyvolání.

  • InvokeMethod vyvolání metody, ale ne konstruktoru nebo inicializátoru typu. Není platné s SetField nebo SetProperty. Pokud InvokeMethod je zadán sám, BindingFlags.Public, , BindingFlags.Instancea BindingFlags.Static jsou automaticky zahrnuty.

  • GetField k získání hodnoty pole. Není platné s SetField.

  • SetField a nastavte hodnotu pole. Není platné s GetField.

  • GetProperty získat vlastnost. Není platné s SetProperty.

  • SetProperty nastavte vlastnost. Není platné s GetProperty.

Další informace naleznete na System.Reflection.BindingFlags.

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 args matici (pokud nejsou pro člen definovány výchozí argumenty a BindingFlags.OptionalParamBinding není zadán).

  • Typ každého argumentu lze převést pořadačem na typ parametru.

Pořadač najde všechny odpovídající metody. Tyto metody se nacházejí na základě typu požadované vazby (BindingFlags hodnoty InvokeMethod, GetPropertyatd.). 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.BindToMethodBinder třídy je zodpovědná za výběr metody, která se má vyvolat. Výchozí pořadač vybere nejpřesnější shodu.

Omezení přístupu jsou ignorována 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 při System.Reflection každém plně důvěryhodném kódu.

Pole můžete Type.InvokeMember nastavit na určitou hodnotu zadáním BindingFlags.SetField. Pokud například chcete nastavit pole veřejné instance s názvem F ve třídě C a F je , Stringmůžete použít kód, například:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

Pokud je F, String[]můžete použít kód, například:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

která inicializuje pole F do tohoto nového pole. Můžete také použít Type.InvokeMember k nastavení pozice v matici zadáním indexu hodnoty a následné další hodnoty pomocí kódu, jako je například následující:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

Tím změníte řetězec "z" v poli, které F obsahuje, na řetězec "b".

Při vyvolání člena IDispatch můžete místo názvu člena zadat ID dispID pomocí formátu řetězce "[DispID=##]". Pokud je například Id DispID myComMethod 3, můžete místo "MyComMethod" zadat řetězec "[DispID=3]". Vyvolání člena pomocí DispID je rychlejší než vyhledání člena podle jména. Ve složitých scénářích agregace je dispID někdy jediným způsobem, jak vyvolat požadovaný člen.

Poznámka:

Tuto metodu lze použít pro přístup k neveřejným členům, pokud byl volající udělen ReflectionPermission příznakem ReflectionPermissionFlag.RestrictedMemberAccess a pokud je sada udělení nepřístupných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz aspekty zabezpečení pro reflexi.)

Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na .NET Framework 3.5 nebo novější.

Viz také

Platí pro