Type.InvokeMember Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.IgnoreCaseignorovat případname.BindingFlags.DeclaredOnlyhledat 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:
CreateInstancevyvolání konstruktoru. Vlastnostnameje ignorována. Není platné s jinými příznaky vyvolání.InvokeMethodvyvolání metody, ale ne konstruktoru nebo inicializátoru typu. Není platné sSetFieldneboSetProperty. PokudInvokeMethodje zadán sám,BindingFlags.Public, ,BindingFlags.InstanceaBindingFlags.Staticjsou automaticky zahrnuty.GetFieldk získání hodnoty pole. Není platné sSetField.SetFielda nastavte hodnotu pole. Není platné sGetField.GetPropertyzískat vlastnost. Není platné sSetProperty.SetPropertynastavte vlastnost. Není platné sGetProperty.
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
argsmatici (pokud nejsou pro člen definovány výchozí argumenty aBindingFlags.OptionalParamBindingnení 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é
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
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.IgnoreCaseignorovat případname.BindingFlags.DeclaredOnlyhledat 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:
CreateInstancevyvolání konstruktoru. Vlastnostnameje ignorována. Není platné s jinými příznaky vyvolání.InvokeMethodvyvolání metody, ale ne konstruktoru nebo inicializátoru typu. Není platné sSetFieldneboSetProperty. PokudInvokeMethodje zadán sám,BindingFlags.Public, ,BindingFlags.InstanceaBindingFlags.Staticjsou automaticky zahrnuty.GetFieldk získání hodnoty pole. Není platné sSetField.SetFielda nastavte hodnotu pole. Není platné sGetField.GetPropertyzískat vlastnost. Není platné sSetProperty.SetPropertynastavte vlastnost. Není platné sGetProperty.
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
argsmatici (pokud nejsou pro člen definovány výchozí argumenty aBindingFlags.OptionalParamBindingnení 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é
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
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.IgnoreCaseignorovat případname.BindingFlags.DeclaredOnlyhledat 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:
CreateInstancevyvolání konstruktoru. Vlastnostnameje ignorována. Není platné s jinými příznaky vyvolání.InvokeMethodvyvolání metody, ale ne konstruktoru nebo inicializátoru typu. Není platné sSetFieldneboSetProperty. PokudInvokeMethodje zadán sám,BindingFlags.Public, ,BindingFlags.InstanceaBindingFlags.Staticjsou automaticky zahrnuty.GetFieldk získání hodnoty pole. Není platné sSetField.SetFielda nastavte hodnotu pole. Není platné sGetField.GetPropertyzískat vlastnost. Není platné sSetProperty.SetPropertynastavte vlastnost. Není platné sGetProperty.
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
argsmatici (pokud nejsou pro člen definovány výchozí argumenty aBindingFlags.OptionalParamBindingnení 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é
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission