Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

Definicja

Wywołuje określonego członka bieżącego Type.Invokes a specific member of the current Type.

Przeciążenia

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

W przypadku przesłonięcia w klasie pochodnej, wywołuje określonego elementu członkowskiego, dopasowanie określoną listę argumentów, Modyfikatory i kultury i za pomocą ograniczeń w określonym powiązaniu.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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

Wywołuje określony element członkowski, dopasowanie określoną listę argumentów i za pomocą ograniczeń w określonym powiązaniu.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

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

Wywołuje określony element członkowski, dopasowanie określoną listę argumentów i kultury i za pomocą ograniczeń w określonym powiązaniu.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

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

W przypadku przesłonięcia w klasie pochodnej, wywołuje określonego elementu członkowskiego, dopasowanie określoną listę argumentów, Modyfikatory i kultury i za pomocą ograniczeń w określonym powiązaniu.When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

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

Parametry

name
String String String

Ciąg zawierający nazwę konstruktora, metody, właściwości lub pól członka do wywołania.The string containing the name of the constructor, method, property, or field member to invoke.

—lub—-or- Ciąg pusty ("") do wywołania domyślny element członkowski.An empty string ("") to invoke the default member.

—lub—-or- Aby uzyskać IDispatch członków, ciąg reprezentujący identyfikator DispID, na przykład "[identyfikator DispID = 3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Maska bitów składająca się z co najmniej jeden BindingFlags określające, jak jest prowadzone wyszukiwanie.A bitmask comprised of one or more BindingFlags that specify how the search is conducted. Dostęp może być jednym z BindingFlags takich jak Public, NonPublic, Private, InvokeMethod, GetFieldi tak dalej.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Typ wyszukiwania nie muszą być określane.The type of lookup need not be specified. W przypadku pominięcia typ wyszukiwania BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static są używane.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Obiekt, który określa zestaw właściwości i umożliwia powiązanie, które może obejmować wybór metody przeciążonej, wymuszanie typów argumentu i wywołanie elementu członkowskiego przez odbicie.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

—lub—-or- Odwołanie o wartości null (Nothing w języku Visual Basic), aby użyć DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Należy pamiętać, że jawne określenie Binder obiekt może być wymagane dla pomyślnie wywołanie przeciążenia metody ze zmiennymi argumentami.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Obiekt do wywołania określonego elementu członkowskiego.The object on which to invoke the specified member.

args
Object[]

Tablica zawierająca argumenty do przekazania do składowej na potrzeby wywołania.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

Tablica ParameterModifier obiektów reprezentujących atrybuty skojarzone z odpowiednim elementem w args tablicy.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. Parametr skojarzonych z nimi atrybutów są przechowywane w podpisie elementu członkowskiego.A parameter's associated attributes are stored in the member's signature.

Tylko wtedy, gdy wywołanie składnika modelu COM, domyślny integrator przetwarza tego parametru.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

CultureInfo Obiekt reprezentujący globalizacji ustawienia regionalne, które mogą być konieczne w przypadku konwersji specyficzne dla ustawień regionalnych, takich jak konwertowanie ciągów liczbowych na wartość o podwójnej precyzji.The CultureInfo object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

—lub—-or- Odwołanie o wartości null (Nothing w języku Visual Basic) do użycia bieżący wątek CultureInfo.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

Tablica zawierająca nazwy parametrów, do której wartości w args tablicy są przekazywane.An array containing the names of the parameters to which the values in the args array are passed.

Zwraca

Obiekt reprezentujący wartość zwracaną wywołanego elementu członkowskiego.An object representing the return value of the invoked member.

Implementuje

Wyjątki

invokeAttr nie zawiera CreateInstance i name jest null.invokeAttr does not contain CreateInstance and name is null.

args i modifiers nie mają tę samą długość.args and modifiers do not have the same length.

—lub—-or- invokeAttr nie jest prawidłowym BindingFlags atrybutu.invokeAttr is not a valid BindingFlags attribute.

—lub—-or- invokeAttr nie zawiera jedną z następujących flag powiązania: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, lub SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

—lub—-or- invokeAttr zawiera CreateInstance w połączeniu z InvokeMethod, GetField, SetField, GetProperty, lub SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

—lub—-or- invokeAttr zawiera zarówno GetField i SetField.invokeAttr contains both GetField and SetField.

—lub—-or- invokeAttr zawiera zarówno GetProperty i SetProperty.invokeAttr contains both GetProperty and SetProperty.

—lub—-or- invokeAttr zawiera InvokeMethod w połączeniu z SetField lub SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

—lub—-or- invokeAttr zawiera SetField i args ma więcej niż jeden element.invokeAttr contains SetField and args has more than one element.

—lub—-or- Tablica parametrów nazwanych jest większa niż tablica argumentów.The named parameter array is larger than the argument array.

—lub—-or- Ta metoda jest wywoływana dla obiektu COM i jedną z następujących flag powiązania nie przekazano: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, lub BindingFlags.PutRefDispProperty.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

—lub—-or- Jedna z nich tablic nazwany parametr zawiera ciąg, który jest null.One of the named parameter arrays contains a string that is null.

Określony element członkowski jest inicjator klasy.The specified member is a class initializer.

Nie można odnaleźć pola lub właściwości.The field or property cannot be found.

Brak metody można znaleźć odpowiadającej argumentów args.No method can be found that matches the arguments in args.

—lub—-or- Brak elementów członkowskich, można znaleźć zawierającej nazwy argumentów dostarczone w namedParameters.No member can be found that has the argument names supplied in namedParameters.

—lub—-or- Bieżący Type obiekt reprezentuje typ, który zawiera parametry typu otwartego, czyli ContainsGenericParameters zwraca true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Nie można wywołać określonego elementu członkowskiego target.The specified member cannot be invoked on target.

Więcej niż jednej metody odpowiadającego kryteriom powiązania.More than one method matches the binding criteria.

Metody reprezentowanej przez name ma jeden lub więcej określonych parametrów typu rodzajowego.The method represented by name has one or more unspecified generic type parameters. Oznacza to, że metody ContainsGenericParameters właściwość zwraca true.That is, the method's ContainsGenericParameters property returns true.

Uwagi

InvokeMember wywołuje członek konstruktora lub metody, pobiera lub ustawia element właściwości, pobiera lub ustawia element członkowski pola danych lub pobiera lub ustawia element członkowski tablicy.InvokeMember calls a constructor member or a method member, gets or sets a property member, gets or sets a data field member, or gets or sets an element of an array member.

Uwaga

Nie można użyć InvokeMember do wywoływania metody rodzajowej.You cannot use InvokeMember to invoke a generic method.

Gdy wywołujesz IDispatch elementu członkowskiego, możesz określić identyfikator DispID zamiast nazwy elementu członkowskiego, używając formatu ciągu "[identyfikator DispID = ##]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Na przykład, jeśli identyfikator DispID MyComMethod wynosi 3, możesz określić ciąg "[identyfikator DispID = 3]" zamiast "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Wywoływanie składowej przez identyfikator DispID jest szybsze niż Wyszukiwanie elementu członkowskiego według nazwy.Invoking a member by DispID is faster than looking up the member by name. W scenariuszach złożoną agregację DispID czasami jest jedynym sposobem, aby wywołać żądanego elementu.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Mimo że domyślny integrator nie przetwarza ParameterModifier lub CultureInfo ( modifiers i culture parametrów), można użyć streszczenia System.Reflection.Binder klasy do napisania niestandardowego integratora, który przetwarza modifiers i culture.Although the default binder does not process ParameterModifier or CultureInfo (the modifiers and culture parameters), you can use the abstract System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifier jest używana tylko podczas wywoływania przez współdziałania z modelem COM i są obsługiwane tylko w przypadku parametrów, które są przekazywane przez odwołanie.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Każdy parametr w namedParameters tablicy pobiera wartość w odpowiednim elementem w args tablicy.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. Jeśli długość args jest większa niż długość namedParameters, pozostałe wartości argumentów są przekazywane w kolejności.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

namedParameters Tablicy można zmienić kolejność argumentów w tablicy wejściowej.The namedParameters array can be used to change the order of arguments in an input array. Na przykład, biorąc pod uwagę metody M(string a, int b) (M(ByVal a As String, ByVal b As Integer) w języku Visual Basic) i Tablica wejściowa { 42, "x" }, Tablica wejściowa mogą być przekazywane bez zmian do args Jeśli tablica { "b", "a" } podano dla namedParameters.For example, given the method M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) and the input array { 42, "x" }, the input array can be passed unchanged to args if the array { "b", "a" } is supplied for namedParameters.

Następujące BindingFlags flagi filtru może służyć do definiowania elementów członkowskich, które można uwzględnić w wyszukiwaniu:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Określ BindingFlags.Public obejmujący publiczne elementy członkowskie w wyszukiwaniu.Specify BindingFlags.Public to include public members in the search.

  • Określ BindingFlags.NonPublic obejmujący elementów członkowskich niepublicznych (czyli prywatne, wewnętrzne i chronione elementy członkowskie) w wyszukiwaniu.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Określ BindingFlags.FlattenHierarchy obejmujący statyczne elementy członkowskie w hierarchii.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Następujące BindingFlags flagi modyfikatora może służyć do zmiany sposobu działania wyszukiwania:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase Aby zignorować wielkość liter name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly Aby wyszukać tylko do elementów członkowskich zadeklarowanych w Type, nie elementów członkowskich, które zostały po prostu odziedziczone.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Następujące BindingFlags flagi wywołania może służyć do określenia, jaką akcję należy podjąć przy użyciu elementu członkowskiego:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance Aby wywołać konstruktora.CreateInstance to invoke a constructor. name jest ignorowany.name is ignored. Nieprawidłowy inne flagi wywołania.Not valid with other invocation flags.

  • InvokeMethod do wywołania metody, ale nie konstruktorze lub inicjatorze typu.InvokeMethod to invoke a method, but not a constructor or a type initializer. Nie jest prawidłowy z SetField lub SetProperty.Not valid with SetField or SetProperty. Jeśli InvokeMethod jest określony przez siebie, BindingFlags.Public, BindingFlags.Instance, i BindingFlags.Static są automatycznie dołączane.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField można pobrać wartości pola.GetField to get the value of a field. Nie jest prawidłowy z SetField.Not valid with SetField.

  • SetField można ustawić wartości pola.SetField to set the value of a field. Nie jest prawidłowy z GetField.Not valid with GetField.

  • GetProperty można pobrać właściwości.GetProperty to get a property. Nie jest prawidłowy z SetProperty.Not valid with SetProperty.

  • SetProperty można ustawić właściwości.SetProperty to set a property. Nie jest prawidłowy z GetProperty.Not valid with GetProperty.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Metoda zostanie wywołana, jeśli są spełnione oba poniższe warunki:A method will be invoked if both of the following conditions are true:

  • Liczba parametrów w deklaracji metody jest równa liczbie argumentów args tablicy (chyba że argumenty domyślne są zdefiniowane w składowej i BindingFlags.OptionalParamBinding jest określony).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Typ każdego argumentu mogą być konwertowane przez binder typowi parametru.The type of each argument can be converted by the binder to the type of the parameter.

Obiekt wiążący znajdzie wszystkie metody dopasowania.The binder will find all of the matching methods. Te metody zostaną znalezione, oparte na typie powiązania żądane (BindingFlags wartości InvokeMethod, GetPropertyi tak dalej).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Zestaw metod są filtrowane według nazwy, liczba argumentów i zestaw modyfikatorów wyszukiwania zdefiniowane w obiekt wiążący.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Po wybraniu metody jest wywoływana.After the method is selected, it is invoked. Dostępność jest sprawdzana w tym momencie.Accessibility is checked at that point. Wyszukiwanie może kontrolować, które zestaw metod, przeszukiwane są na podstawie atrybutu ułatwień dostępu powiązany z metodą.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Binder.BindToMethod Metody Binder klasy jest odpowiedzialny za wybranie wywoływanej metody.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Domyślny integrator wybiera najbardziej określonego dopasowania.The default binder selects the most specific match.

InvokeMember może służyć do wywołania metody z parametrami, które mają przypisane wartości domyślne.InvokeMember can be used to invoke methods with parameters that have default values. Aby powiązać z tych metod, wymaga odbicia BindingFlags.OptionalParamBinding należy określić.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. Dla parametru, który ma wartość domyślną, możesz podać inną wartość, lub podaj Missing.Value Aby użyć wartości domyślnej.For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

Rozważmy na przykład metody takie jak MyMethod (int x, float y = w wersji 2.0).For example, consider a method such as MyMethod(int x, float y = 2.0). Aby wywołać tej metody za pomocą tylko pierwszy argument jako MyMethod(4), jedną z powyższych flag powiązania i przekazać dwa argumenty, a mianowicie 4 dla pierwszego argumentu i Missing.Value dla drugiego argumentu.To invoke this method with only the first argument as MyMethod(4), pass one of the above binding flags and pass two arguments, namely, 4 for the first argument and Missing.Value for the second argument. Chyba że używasz Missing.Value, nie może pominąć parametrów opcjonalnych za pomocą Invoke metody.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. Jeśli należy to zrobić, użyj InvokeMember zamiast tego.If you must do so, use InvokeMember instead.

Ograniczenia dostępu są ignorowane w przypadku w pełni zaufany kod; oznacza to, konstruktory prywatne, metody, pola i właściwości mogą być dostępne i wywoływane za pośrednictwem System.Reflection zawsze, gdy kod jest w pełni zaufany.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Możesz użyć Type.InvokeMember można ustawić pola na określoną wartość, określając BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Na przykład, jeśli chcesz ustawić pole publiczne wystąpienia o nazwie F klasy C i F jest String, można użyć kodu takiego jak:For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Jeśli jest F String[], można użyć kodu takiego jak:If F is a String[], you can use code such as:

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

która zainicjuje pole F do tej nowej tablicy.which will initialize the field F to this new array. Można również użyć Type.InvokeMember próba ustawienia pozycji w tablicy, podając indeks wartości, a następnie wartość następnego przy użyciu następującego kodu:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Spowoduje to zmianę w tablicy, która F zawiera ciąg "b", ciąg "z".This will change string "z" in the array that F holds to string "b".

Uwaga

Począwszy od .NET Framework 2.0 z dodatkiem Service Pack 1.NET Framework 2.0 Service Pack 1, Metoda ta może służyć do dostępu do elementów członkowskich niepublicznych, jeśli obiekt wywołujący zostało udzielone ReflectionPermission z ReflectionPermissionFlag.RestrictedMemberAccess Flaga, a jeśli zestaw uprawnień elementów członkowskich niepublicznych jest ograniczony do obiektu wywołującego przyznania zestawu lub być podzbiorem jej.Starting with the .NET Framework 2.0 z dodatkiem Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Zobacz Security Considerations for Reflection.)(See Security Considerations for Reflection.)

Aby używać tej funkcji, powinien dotyczyć aplikacji Program .NET Framework 3,5.NET Framework 3.5 lub nowszej.To use this functionality, your application should target the Program .NET Framework 3,5.NET Framework 3.5 or later.

Zabezpieczenia

ReflectionPermission
W celu uzyskiwania dostępu do elementów członkowskich niepublicznych, niezależnie od ich zestawu uprawnień.for accessing non-public members regardless of their grant set. Wyliczenie skojarzone: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
Aby wywoływać kod niezarządzany.to call unmanaged code. Wyliczenie skojarzone: UnmanagedCodeAssociated enumeration: UnmanagedCode

Zobacz też

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

Wywołuje określony element członkowski, dopasowanie określoną listę argumentów i za pomocą ograniczeń w określonym powiązaniu.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
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

Parametry

name
String String String

Ciąg zawierający nazwę konstruktora, metody, właściwości lub pól członka do wywołania.The string containing the name of the constructor, method, property, or field member to invoke.

—lub—-or- Ciąg pusty ("") do wywołania domyślny element członkowski.An empty string ("") to invoke the default member.

—lub—-or- Aby uzyskać IDispatch członków, ciąg reprezentujący identyfikator DispID, na przykład "[identyfikator DispID = 3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Maska bitów składająca się z co najmniej jeden BindingFlags określające, jak jest prowadzone wyszukiwanie.A bitmask comprised of one or more BindingFlags that specify how the search is conducted. Dostęp może być jednym z BindingFlags takich jak Public, NonPublic, Private, InvokeMethod, GetFieldi tak dalej.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Typ wyszukiwania nie muszą być określane.The type of lookup need not be specified. W przypadku pominięcia typ wyszukiwania BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static są używane.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Obiekt, który określa zestaw właściwości i umożliwia powiązanie, które może obejmować wybór metody przeciążonej, wymuszanie typów argumentu i wywołanie elementu członkowskiego przez odbicie.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

—lub—-or- Odwołanie o wartości null (Nothing w języku Visual Basic), aby użyć DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Należy pamiętać, że jawne określenie Binder obiekt może być wymagane dla pomyślnie wywołanie przeciążenia metody ze zmiennymi argumentami.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Obiekt do wywołania określonego elementu członkowskiego.The object on which to invoke the specified member.

args
Object[]

Tablica zawierająca argumenty do przekazania do składowej na potrzeby wywołania.An array containing the arguments to pass to the member to invoke.

Zwraca

Obiekt reprezentujący wartość zwracaną wywołanego elementu członkowskiego.An object representing the return value of the invoked member.

Implementuje

Wyjątki

invokeAttr nie zawiera CreateInstance i name jest null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr nie jest prawidłowym BindingFlags atrybutu.invokeAttr is not a valid BindingFlags attribute.

—lub—-or- invokeAttr nie zawiera jedną z następujących flag powiązania: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, lub SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

—lub—-or- invokeAttr zawiera CreateInstance w połączeniu z InvokeMethod, GetField, SetField, GetProperty, lub SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

—lub—-or- invokeAttr zawiera zarówno GetField i SetField.invokeAttr contains both GetField and SetField.

—lub—-or- invokeAttr zawiera zarówno GetProperty i SetProperty.invokeAttr contains both GetProperty and SetProperty.

—lub—-or- invokeAttr zawiera InvokeMethod w połączeniu z SetField lub SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

—lub—-or- invokeAttr zawiera SetField i args ma więcej niż jeden element.invokeAttr contains SetField and args has more than one element.

—lub—-or- Ta metoda jest wywoływana dla obiektu COM i jedną z następujących flag powiązania nie przekazano: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, lub BindingFlags.PutRefDispProperty.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

—lub—-or- Jedna z nich tablic nazwany parametr zawiera ciąg, który jest null.One of the named parameter arrays contains a string that is null.

Określony element członkowski jest inicjator klasy.The specified member is a class initializer.

Nie można odnaleźć pola lub właściwości.The field or property cannot be found.

Brak metody można znaleźć odpowiadającej argumentów args.No method can be found that matches the arguments in args.

—lub—-or- Bieżący Type obiekt reprezentuje typ, który zawiera parametry typu otwartego, czyli ContainsGenericParameters zwraca true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Nie można wywołać określonego elementu członkowskiego target.The specified member cannot be invoked on target.

Więcej niż jednej metody odpowiadającego kryteriom powiązania.More than one method matches the binding criteria.

.NET Compact Framework nie obsługuje obecnie tej metody.The .NET Compact Framework does not currently support this method.

Metody reprezentowanej przez name ma jeden lub więcej określonych parametrów typu rodzajowego.The method represented by name has one or more unspecified generic type parameters. Oznacza to, że metody ContainsGenericParameters właściwość zwraca true.That is, the method's ContainsGenericParameters property returns true.

Przykłady

W poniższym przykładzie użyto InvokeMember do dostępu do elementów członkowskich typu.The following example uses InvokeMember to access members of a type.

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp 
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   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. 
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e ) 
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
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);
    }
}
Imports System
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 'New

    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 'MyType

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 'Main
End Class 'MyApp

Uwagi

Uwaga

Nie można użyć InvokeMember do wywoływania metody rodzajowej.You cannot use InvokeMember to invoke a generic method.

Następujące BindingFlags flagi filtru może służyć do definiowania elementów członkowskich, które można uwzględnić w wyszukiwaniu:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Określ BindingFlags.Public obejmujący publiczne elementy członkowskie w wyszukiwaniu.Specify BindingFlags.Public to include public members in the search.

  • Określ BindingFlags.NonPublic obejmujący elementów członkowskich niepublicznych (czyli prywatnych i chronionych elementów członkowskich) w wyszukiwaniu.Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • Określ BindingFlags.FlattenHierarchy obejmujący statyczne elementy członkowskie w hierarchii.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Następujące BindingFlags flagi modyfikatora może służyć do zmiany sposobu działania wyszukiwania:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase Aby zignorować wielkość liter name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly Aby wyszukać tylko do elementów członkowskich zadeklarowanych w Type, nie elementów członkowskich, które zostały po prostu odziedziczone.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Następujące BindingFlags flagi wywołania może służyć do określenia, jaką akcję należy podjąć przy użyciu elementu członkowskiego:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance Aby wywołać konstruktora.CreateInstance to invoke a constructor. name jest ignorowany.name is ignored. Nieprawidłowy inne flagi wywołania.Not valid with other invocation flags.

  • InvokeMethod do wywołania metody, ale nie konstruktorze lub inicjatorze typu.InvokeMethod to invoke a method, but not a constructor or a type initializer. Nie jest prawidłowy z SetField lub SetProperty.Not valid with SetField or SetProperty. Jeśli InvokeMethod jest określony przez siebie, BindingFlags.Public, BindingFlags.Instance, i BindingFlags.Static są automatycznie dołączane.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField można pobrać wartości pola.GetField to get the value of a field. Nie jest prawidłowy z SetField.Not valid with SetField.

  • SetField można ustawić wartości pola.SetField to set the value of a field. Nie jest prawidłowy z GetField.Not valid with GetField.

  • GetProperty można pobrać właściwości.GetProperty to get a property. Nie jest prawidłowy z SetProperty.Not valid with SetProperty.

  • SetProperty można ustawić właściwości.SetProperty to set a property. Nie jest prawidłowy z GetProperty.Not valid with GetProperty.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Metoda zostanie wywołana, jeśli są spełnione oba poniższe warunki:A method will be invoked if both of the following conditions are true:

  • Liczba parametrów w deklaracji metody jest równa liczbie argumentów args tablicy (chyba że argumenty domyślne są zdefiniowane w składowej i BindingFlags.OptionalParamBinding jest określony).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Typ każdego argumentu mogą być konwertowane przez binder typowi parametru.The type of each argument can be converted by the binder to the type of the parameter.

Obiekt wiążący znajdzie wszystkie metody dopasowania.The binder will find all of the matching methods. Te metody zostaną znalezione, oparte na typie powiązania żądane (BindingFlags wartości InvokeMethod, GetPropertyi tak dalej).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Zestaw metod są filtrowane według nazwy, liczba argumentów i zestaw modyfikatorów wyszukiwania zdefiniowane w obiekt wiążący.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Po wybraniu metody jest wywoływana.After the method is selected, it is invoked. Dostępność jest sprawdzana w tym momencie.Accessibility is checked at that point. Wyszukiwanie może kontrolować, które zestaw metod, przeszukiwane są na podstawie atrybutu ułatwień dostępu powiązany z metodą.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Binder.BindToMethod Metody Binder klasy jest odpowiedzialny za wybranie wywoływanej metody.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Domyślny integrator wybiera najbardziej określonego dopasowania.The default binder selects the most specific match.

Ograniczenia dostępu są ignorowane w przypadku w pełni zaufany kod; oznacza to, konstruktory prywatne, metody, pola i właściwości mogą być dostępne i wywoływane za pośrednictwem System.Reflection zawsze, gdy kod jest w pełni zaufany.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

Możesz użyć Type.InvokeMember można ustawić pola na określoną wartość, określając BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Na przykład, jeśli chcesz ustawić pole publiczne wystąpienia o nazwie F klasy C i F jest String, można użyć kodu takiego jak:For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

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

Jeśli jest F String[], można użyć kodu takiego jak:If F is a String[], you can use code such as:

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

która zainicjuje pole F do tej nowej tablicy.which will initialize the field F to this new array. Można również użyć Type.InvokeMember próba ustawienia pozycji w tablicy, podając indeks wartości, a następnie wartość następnego przy użyciu następującego kodu:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Spowoduje to zmianę w tablicy, która F zawiera ciąg "b", ciąg "z".This will change string "z" in the array that F holds to string "b".

Gdy wywołujesz IDispatch elementu członkowskiego, możesz określić identyfikator DispID zamiast nazwy elementu członkowskiego, używając formatu ciągu "[identyfikator DispID = ##]".When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". Na przykład, jeśli identyfikator DispID MyComMethod wynosi 3, możesz określić ciąg "[identyfikator DispID = 3]" zamiast "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Wywoływanie składowej przez identyfikator DispID jest szybsze niż Wyszukiwanie elementu członkowskiego według nazwy.Invoking a member by DispID is faster than looking up the member by name. W scenariuszach złożoną agregację DispID czasami jest jedynym sposobem, aby wywołać żądanego elementu.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Uwaga

Począwszy od .NET Framework 2.0 z dodatkiem Service Pack 1.NET Framework 2.0 Service Pack 1, Metoda ta może służyć do dostępu do elementów członkowskich niepublicznych, jeśli obiekt wywołujący zostało udzielone ReflectionPermission z ReflectionPermissionFlag.RestrictedMemberAccess Flaga, a jeśli zestaw uprawnień elementów członkowskich niepublicznych jest ograniczony do obiektu wywołującego przyznania zestawu lub być podzbiorem jej.Starting with the .NET Framework 2.0 z dodatkiem Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Zobacz Security Considerations for Reflection.)(See Security Considerations for Reflection.)

Aby używać tej funkcji, powinien dotyczyć aplikacji Program .NET Framework 3,5.NET Framework 3.5 lub nowszej.To use this functionality, your application should target the Program .NET Framework 3,5.NET Framework 3.5 or later.

Zabezpieczenia

ReflectionPermission
W celu uzyskiwania dostępu do elementów członkowskich niepublicznych, niezależnie od ich zestawu uprawnień.for accessing non-public members regardless of their grant set. Wyliczenie skojarzone: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
Aby wywoływać kod niezarządzany.to call unmanaged code. Wyliczenie skojarzone: UnmanagedCodeAssociated enumeration: UnmanagedCode

Zobacz też

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

Wywołuje określony element członkowski, dopasowanie określoną listę argumentów i kultury i za pomocą ograniczeń w określonym powiązaniu.Invokes the specified member, using the specified binding constraints and matching the specified argument list and 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);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
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

Parametry

name
String String String

Ciąg zawierający nazwę konstruktora, metody, właściwości lub pól członka do wywołania.The string containing the name of the constructor, method, property, or field member to invoke.

—lub—-or- Ciąg pusty ("") do wywołania domyślny element członkowski.An empty string ("") to invoke the default member.

—lub—-or- Aby uzyskać IDispatch członków, ciąg reprezentujący identyfikator DispID, na przykład "[identyfikator DispID = 3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Maska bitów składająca się z co najmniej jeden BindingFlags określające, jak jest prowadzone wyszukiwanie.A bitmask comprised of one or more BindingFlags that specify how the search is conducted. Dostęp może być jednym z BindingFlags takich jak Public, NonPublic, Private, InvokeMethod, GetFieldi tak dalej.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Typ wyszukiwania nie muszą być określane.The type of lookup need not be specified. W przypadku pominięcia typ wyszukiwania BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static są używane.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Obiekt, który określa zestaw właściwości i umożliwia powiązanie, które może obejmować wybór metody przeciążonej, wymuszanie typów argumentu i wywołanie elementu członkowskiego przez odbicie.An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

—lub—-or- Odwołanie o wartości null (Nothing w języku Visual Basic), aby użyć DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Należy pamiętać, że jawne określenie Binder obiekt może być wymagane dla pomyślnie wywołanie przeciążenia metody ze zmiennymi argumentami.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Obiekt do wywołania określonego elementu członkowskiego.The object on which to invoke the specified member.

args
Object[]

Tablica zawierająca argumenty do przekazania do składowej na potrzeby wywołania.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

Obiekt reprezentujący globalizacji ustawienia regionalne, które będą niezbędne do konwersji specyficzne dla ustawień regionalnych, takich jak konwertowanie liczbowych String do Double.The object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

—lub—-or- Odwołanie o wartości null (Nothing w języku Visual Basic) do użycia bieżący wątek CultureInfo.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

Zwraca

Obiekt reprezentujący wartość zwracaną wywołanego elementu członkowskiego.An object representing the return value of the invoked member.

Implementuje

Wyjątki

invokeAttr nie zawiera CreateInstance i name jest null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr nie jest prawidłowym BindingFlags atrybutu.invokeAttr is not a valid BindingFlags attribute.

—lub—-or- invokeAttr nie zawiera jedną z następujących flag powiązania: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, lub SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

—lub—-or- invokeAttr zawiera CreateInstance w połączeniu z InvokeMethod, GetField, SetField, GetProperty, lub SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

—lub—-or- invokeAttr zawiera zarówno GetField i SetField.invokeAttr contains both GetField and SetField.

—lub—-or- invokeAttr zawiera zarówno GetProperty i SetProperty.invokeAttr contains both GetProperty and SetProperty.

—lub—-or- invokeAttr zawiera InvokeMethod w połączeniu z SetField lub SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

—lub—-or- invokeAttr zawiera SetField i args ma więcej niż jeden element.invokeAttr contains SetField and args has more than one element.

—lub—-or- Ta metoda jest wywoływana dla obiektu COM i jedną z następujących flag powiązania nie przekazano: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, lub BindingFlags.PutRefDispProperty.This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

—lub—-or- Jedna z nich tablic nazwany parametr zawiera ciąg, który jest null.One of the named parameter arrays contains a string that is null.

Określony element członkowski jest inicjator klasy.The specified member is a class initializer.

Nie można odnaleźć pola lub właściwości.The field or property cannot be found.

Brak metody można znaleźć odpowiadającej argumentów args.No method can be found that matches the arguments in args.

—lub—-or- Bieżący Type obiekt reprezentuje typ, który zawiera parametry typu otwartego, czyli ContainsGenericParameters zwraca true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Nie można wywołać określonego elementu członkowskiego target.The specified member cannot be invoked on target.

Więcej niż jednej metody odpowiadającego kryteriom powiązania.More than one method matches the binding criteria.

Metody reprezentowanej przez name ma jeden lub więcej określonych parametrów typu rodzajowego.The method represented by name has one or more unspecified generic type parameters. Oznacza to, że metody ContainsGenericParameters właściwość zwraca true.That is, the method's ContainsGenericParameters property returns true.

Uwagi

Mimo że domyślny integrator nie przetwarza CultureInfo ( culture parametru), można użyć streszczenia System.Reflection.Binder klasy do napisania niestandardowego integratora, który przetwarza culture.Although the default binder does not process CultureInfo (the culture parameter), you can use the abstract System.Reflection.Binder class to write a custom binder that does process culture.

Uwaga

Nie można użyć InvokeMember do wywoływania metody rodzajowej.You cannot use InvokeMember to invoke a generic method.

Następujące BindingFlags flagi filtru może służyć do definiowania elementów członkowskich, które można uwzględnić w wyszukiwaniu:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Określ BindingFlags.Public obejmujący publiczne elementy członkowskie w wyszukiwaniu.Specify BindingFlags.Public to include public members in the search.

  • Określ BindingFlags.NonPublic obejmujący elementów członkowskich niepublicznych (czyli prywatne, wewnętrzne i chronione elementy członkowskie) w wyszukiwaniu.Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Określ BindingFlags.FlattenHierarchy obejmujący statyczne elementy członkowskie w hierarchii.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Następujące BindingFlags flagi modyfikatora może służyć do zmiany sposobu działania wyszukiwania:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCase Aby zignorować wielkość liter name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnly Aby wyszukać tylko do elementów członkowskich zadeklarowanych w Type, nie elementów członkowskich, które zostały po prostu odziedziczone.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Następujące BindingFlags flagi wywołania może służyć do określenia, jaką akcję należy podjąć przy użyciu elementu członkowskiego:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstance Aby wywołać konstruktora.CreateInstance to invoke a constructor. name jest ignorowany.name is ignored. Nieprawidłowy inne flagi wywołania.Not valid with other invocation flags.

  • InvokeMethod do wywołania metody, ale nie konstruktorze lub inicjatorze typu.InvokeMethod to invoke a method, but not a constructor or a type initializer. Nie jest prawidłowy z SetField lub SetProperty.Not valid with SetField or SetProperty. Jeśli InvokeMethod jest określony przez siebie, BindingFlags.Public, BindingFlags.Instance, i BindingFlags.Static są automatycznie dołączane.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetField można pobrać wartości pola.GetField to get the value of a field. Nie jest prawidłowy z SetField.Not valid with SetField.

  • SetField można ustawić wartości pola.SetField to set the value of a field. Nie jest prawidłowy z GetField.Not valid with GetField.

  • GetProperty można pobrać właściwości.GetProperty to get a property. Nie jest prawidłowy z SetProperty.Not valid with SetProperty.

  • SetProperty można ustawić właściwości.SetProperty to set a property. Nie jest prawidłowy z GetProperty.Not valid with GetProperty.

Aby uzyskać więcej informacji, zobacz System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Metoda zostanie wywołana, jeśli są spełnione oba poniższe warunki:A method will be invoked if both of the following conditions are true:

  • Liczba parametrów w deklaracji metody jest równa liczbie argumentów args tablicy (chyba że argumenty domyślne są zdefiniowane w składowej i BindingFlags.OptionalParamBinding jest określony).The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • Typ każdego argumentu mogą być konwertowane przez binder typowi parametru.The type of each argument can be converted by the binder to the type of the parameter.

Obiekt wiążący znajdzie wszystkie metody dopasowania.The binder will find all of the matching methods. Te metody zostaną znalezione, oparte na typie powiązania żądane (BindingFlags wartości InvokeMethod, GetPropertyi tak dalej).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Zestaw metod są filtrowane według nazwy, liczba argumentów i zestaw modyfikatorów wyszukiwania zdefiniowane w obiekt wiążący.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

Po wybraniu metody jest wywoływana.After the method is selected, it is invoked. Dostępność jest sprawdzana w tym momencie.Accessibility is checked at that point. Wyszukiwanie może kontrolować, które zestaw metod, przeszukiwane są na podstawie atrybutu ułatwień dostępu powiązany z metodą.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Binder.BindToMethod Metody Binder klasy jest odpowiedzialny za wybranie wywoływanej metody.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Domyślny integrator wybiera najbardziej określonego dopasowania.The default binder selects the most specific match.

Ograniczenia dostępu są ignorowane w przypadku w pełni zaufany kod; oznacza to, że konstruktory prywatne, metody, pola i właściwości umożliwia dostęp i wywoływany przez odbicie, zawsze wtedy, gdy kod jest w pełni zaufany.Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through Reflection whenever the code is fully trusted.

Możesz użyć Type.InvokeMember można ustawić pola na określoną wartość, określając BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Na przykład, jeśli chcesz ustawić pole publiczne wystąpienia o nazwie F klasy C i F jest String można użyć kodu takiego jak:For example, if you want to set a public instance field named F on class C, and F is a String you can use code such as:

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

Jeśli jest F String[], można użyć kodu takiego jak:If F is a String[], you can use code such as:

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

która zainicjuje pole F do tej nowej tablicy.which will initialize the field F to this new array. Można również użyć Type.InvokeMember próba ustawienia pozycji w tablicy, podając indeks wartości, a następnie wartość następnego przy użyciu następującego kodu:You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

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

Spowoduje to zmianę w tablicy, która F zawiera ciąg "b", ciąg "z".This will change string "z" in the array that F holds to string "b".

Gdy wywołujesz IDispatch elementu członkowskiego, możesz określić identyfikator DispID zamiast nazwy elementu członkowskiego, używając formatu ciągu "[identyfikator DispID = ##]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Na przykład, jeśli identyfikator DispID MyComMethod wynosi 3, możesz określić ciąg "[identyfikator DispID = 3]" zamiast "MyComMethod".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Wywoływanie składowej przez identyfikator DispID jest szybsze niż Wyszukiwanie elementu członkowskiego według nazwy.Invoking a member by DispID is faster than looking up the member by name. W scenariuszach złożoną agregację DispID czasami jest jedynym sposobem, aby wywołać żądanego elementu.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Uwaga

Począwszy od .NET Framework 2.0 z dodatkiem Service Pack 1.NET Framework 2.0 Service Pack 1, Metoda ta może służyć do dostępu do elementów członkowskich niepublicznych, jeśli obiekt wywołujący zostało udzielone ReflectionPermission z ReflectionPermissionFlag.RestrictedMemberAccess Flaga, a jeśli zestaw uprawnień elementów członkowskich niepublicznych jest ograniczony do obiektu wywołującego przyznania zestawu lub być podzbiorem jej.Starting with the .NET Framework 2.0 z dodatkiem Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Zobacz Security Considerations for Reflection.)(See Security Considerations for Reflection.)

Aby używać tej funkcji, powinien dotyczyć aplikacji Program .NET Framework 3,5.NET Framework 3.5 lub nowszej.To use this functionality, your application should target the Program .NET Framework 3,5.NET Framework 3.5 or later.

Zabezpieczenia

ReflectionPermission
W celu uzyskiwania dostępu do elementów członkowskich niepublicznych, niezależnie od ich zestawu uprawnień.for accessing non-public members regardless of their grant set. Wyliczenie skojarzone: MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
Aby wywoływać kod niezarządzany.to call unmanaged code. Wyliczenie skojarzone: UnmanagedCodeAssociated enumeration: UnmanagedCode

Zobacz też

Dotyczy