Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

Определение

Вызывает определенный член текущего объекта Type.Invokes a specific member of the current Type.

Перегрузки

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[])

При переопределении в производном классе вызывает указанный член, соответствующий заданным ограничениям привязки, списку аргументов, модификаторов, а также языку и региональным параметрам.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[])

Вызывает указанный член, соответствующий заданным ограничениям привязки и указанному списку аргументов.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)

Вызывает указанный член, соответствующий заданным ограничениям привязки, списку аргументов, а также языку и региональным параметрам.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[])

При переопределении в производном классе вызывает указанный член, соответствующий заданным ограничениям привязки, списку аргументов, модификаторов, а также языку и региональным параметрам.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

Параметры

name
String String String

Строка, содержащая имя вызываемого элемента — конструктора, метода, свойства или поля.The string containing the name of the constructor, method, property, or field member to invoke.

-или--or- Пустая строка ("") — в этом случае будет вызван член по умолчанию.An empty string ("") to invoke the default member.

- или --or- Для членов IDispatch — строка, представляющая идентификатор DispID, например "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.A bitwise combination of the enumeration values that specify how the search is conducted. Тип доступа может быть обозначен одним из флагов BindingFlags, например Public, NonPublic, Private, InvokeMethod, GetField и т.д.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Тип поиска указывать необязательно.The type of lookup need not be specified. Если тип поиска не указан, используются флаги BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Объект, определяющий набор свойств и разрешающий привязку, что может включать выбор перегруженных методов, приведение типов аргументов и вызов члена с помощью отражения.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.

-или--or- Пустая ссылка (Nothing в Visual Basic) для использования свойства DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Обратите внимание, что для успешного вызова перегруженных версий метода с переменными аргументами может потребоваться явное объявление объекта Binder.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Объект, для которого следует вызвать указанный член.The object on which to invoke the specified member.

args
Object[]

Массив с аргументами, передаваемыми вызываемому члену.An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

Массив объектов ParameterModifier, представляющих атрибуты, связанные с соответствующим элементом в массиве args.An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. Атрибуты, связанные с параметром, хранятся в сигнатуре члена.A parameter's associated attributes are stored in the member's signature.

Связыватель по умолчанию обрабатывает этот параметр только при вызове COM-компонента.The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

Объект CultureInfo, представляющий используемый языковой стандарт глобализации. Он может понадобиться для выполнения преобразований, зависящих от языкового стандарта, например приведения числа в строковом формате к типу Double.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.

- или --or- Пустая ссылка (Nothing в Visual Basic) для использования объекта CultureInfo текущего потока.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

Массив, содержащий имена параметров, в которые передаются значения элементов массива args.An array containing the names of the parameters to which the values in the args array are passed.

Возвраты

Объект, представляющий возвращаемое значение вызываемого элемента.An object representing the return value of the invoked member.

Реализации

Исключения

invokeAttr не содержит CreateInstance, а name равно null.invokeAttr does not contain CreateInstance and name is null.

args и modifiers имеют разную длину.args and modifiers do not have the same length.

- или --or- invokeAttr не является допустимым атрибутом BindingFlags .invokeAttr is not a valid BindingFlags attribute.

- или --or- invokeAttr не содержит одного из следующих флагов привязки: InvokeMethod, CreateInstance, GetField, SetField, GetProperty или SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

-или--or- invokeAttr содержит CreateInstance в сочетании с InvokeMethod, GetField, SetField, GetProperty или SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- или --or- invokeAttr содержит как GetField, так и SetField.invokeAttr contains both GetField and SetField.

- или --or- invokeAttr содержит как GetProperty, так и SetProperty.invokeAttr contains both GetProperty and SetProperty.

-или--or- invokeAttr содержит InvokeMethod в сочетании с SetField или SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

-или--or- invokeAttr содержит SetField, а args содержит более одного элемента.invokeAttr contains SetField and args has more than one element.

- или --or- Массив именованных параметров больше, чем массив аргументов.The named parameter array is larger than the argument array.

- или --or- Этот метод вызывается для объекта COM, и один из следующих флагов привязки не был передан: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty или 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.

-или--or- Один из массивов именованных параметров содержит строку, имеющую значение null.One of the named parameter arrays contains a string that is null.

Указанный член является инициализатором класса.The specified member is a class initializer.

Невозможно найти поле или свойство.The field or property cannot be found.

Невозможно найти метод, который соответствует аргументам в args.No method can be found that matches the arguments in args.

-или--or- Невозможно найти члены с именами аргументов, указанными в namedParameters.No member can be found that has the argument names supplied in namedParameters.

- или --or- Текущий объект Type представляет тип, содержащий параметры открытого типа, то есть ContainsGenericParameters возвращает true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Невозможно вызвать указанный член для target.The specified member cannot be invoked on target.

Несколько методов соответствуют критериям привязки.More than one method matches the binding criteria.

Метод, представленный name, имеет один или несколько незаданных параметров универсального типа.The method represented by name has one or more unspecified generic type parameters. То есть свойство ContainsGenericParameters метода возвращает true.That is, the method's ContainsGenericParameters property returns true.

Комментарии

InvokeMemberвызывает член конструктора или член метода, получает или задает член свойства, Возвращает или задает элемент поля данных либо возвращает или задает элемент члена массива.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.

Примечание

Нельзя использовать InvokeMember для вызова универсального метода.You cannot use InvokeMember to invoke a generic method.

При вызове IDispatch члена можно указать DISPID вместо имени члена, используя формат строки "[DispID = # #]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Например, если DISPID Микоммесод имеет значение 3, можно указать строку "[DISPID = 3]" вместо "Микоммесод".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Вызов члена по DISPID выполняется быстрее, чем поиск члена по имени.Invoking a member by DispID is faster than looking up the member by name. В сложных сценариях статистической обработки идентификатор DispID иногда является единственным способом вызова нужного члена.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Хотя связыватель по умолчанию не ParameterModifier обрабатывает CultureInfo или ( modifiers параметры culture и), можно использовать абстрактный System.Reflection.Binder класс для написания пользовательского связывателя, который обрабатывает modifiers и 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используется только при вызове через COM-взаимодействие, и обрабатываются только параметры, передаваемые по ссылке.ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

Каждый параметр в массиве namedParameters получает значение в соответствующем элементе в массиве args.Each parameter in the namedParameters array gets the value in the corresponding element in the args array. Если длина args превышает длину namedParameters, оставшиеся значения аргументов передаются по порядку.If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

namedParameters Массив можно использовать для изменения порядка аргументов во входном массиве.The namedParameters array can be used to change the order of arguments in an input array. Например, при наличии метода M(string a, int b) (M(ByVal a As String, ByVal b As Integer) в Visual Basic) и входного массива { 42, "x" }входной массив может быть передан в args неизменном виде, если массив { "b", "a" } предоставляется для 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.

Для определения BindingFlags элементов, включаемых в поиск, можно использовать следующие флаги фильтра:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Укажите BindingFlags.Public , чтобы включить в поиск открытые члены.Specify BindingFlags.Public to include public members in the search.

  • Укажите BindingFlags.NonPublic , чтобы в поиск включались не являющиеся открытыми члены (т. е. частные, внутренние и защищенные члены).Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Укажите BindingFlags.FlattenHierarchy , чтобы включить статические элементы вверх по иерархии.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Для изменения BindingFlags работы поиска можно использовать следующие флаги модификаторов:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCaseзначение, чтобы игнорировать регистр name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlyзначение Type, чтобы искать только члены, объявленные в, а не члены, которые были просто унаследованы.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Для обозначения BindingFlags действия, выполняемого с элементом, можно использовать следующие флаги вызова:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstanceдля вызова конструктора.CreateInstance to invoke a constructor. nameигнорируется.name is ignored. Недопустимый с другими флагами вызова.Not valid with other invocation flags.

  • InvokeMethodдля вызова метода, но не конструктора или инициализатора типа.InvokeMethod to invoke a method, but not a constructor or a type initializer. Недопустимо с SetField или SetProperty.Not valid with SetField or SetProperty. Если InvokeMethod указывается сама по себе BindingFlags.Instance, BindingFlags.Public,, и BindingFlags.Static автоматически включаются.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldдля получения значения поля.GetField to get the value of a field. Не является допустимым для SetField.Not valid with SetField.

  • SetFieldдля задания значения поля.SetField to set the value of a field. Не является допустимым для GetField.Not valid with GetField.

  • GetPropertyдля получения свойства.GetProperty to get a property. Не является допустимым для SetProperty.Not valid with SetProperty.

  • SetPropertyдля задания свойства.SetProperty to set a property. Не является допустимым для GetProperty.Not valid with GetProperty.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Метод будет вызываться, если выполняются оба следующих условия.A method will be invoked if both of the following conditions are true:

  • Число параметров в объявлении метода равно числу аргументов в args массиве (если только аргументы по умолчанию не определены для элемента и BindingFlags.OptionalParamBinding не указаны).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).

  • Тип каждого аргумента может быть преобразован связывателем в тип параметра.The type of each argument can be converted by the binder to the type of the parameter.

Связыватель найдет все методы сопоставления.The binder will find all of the matching methods. Эти методы находятся в зависимости от типа запрашиваемой привязки (BindingFlags значения InvokeMethod, GetPropertyи т. д.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Набор методов фильтруется по имени, числу аргументов и набору модификаторов поиска, определенных в связывателе.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

После выбора метода вызывается метод.After the method is selected, it is invoked. На этом этапе проверяется доступность.Accessibility is checked at that point. Поиск может управлять тем, какой набор методов выполняется в зависимости от атрибута доступности, связанного с методом.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Binder.BindToMethod МетодBinder класса отвечает за выбор вызываемого метода.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Связыватель по умолчанию выбирает наиболее конкретное соответствие.The default binder selects the most specific match.

InvokeMemberможет использоваться для вызова методов с параметрами, имеющими значения по умолчанию.InvokeMember can be used to invoke methods with parameters that have default values. Для привязки к этим методам необходимо указать BindingFlags.OptionalParamBinding отражение.To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. Для параметра, имеющего значение по умолчанию, можно указать другое значение или Missing.Value использовать значение по умолчанию.For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

Например, рассмотрим метод MyMethod (int x, float y = 2,0).For example, consider a method such as MyMethod(int x, float y = 2.0). Чтобы вызвать этот метод только с первым аргументом метода MyMethod (4), передайте один из приведенных выше флагов привязки и передайте два аргумента, а именно, 4 Missing.Value для первого аргумента и для второго аргумента.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. Если вы не Missing.Valueиспользуете, то нельзя опускать необязательные параметры Invoke с помощью метода.Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. Если это необходимо, используйте InvokeMember вместо него.If you must do so, use InvokeMember instead.

Ограничения доступа игнорируются для полностью доверенного кода. Это значит, что доступ к частным конструкторам, методам, полям и свойствам можно получить и System.Reflection вызвать при каждом полном доверии кода.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.

Можно использовать Type.InvokeMember для задания поля в определенном значении, указав BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Например, если нужно задать поле открытого экземпляра с именем F для класса C, а F — String, можно использовать такой код: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);

Если F — String[], можно использовать такой код: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);

что приведет к инициализации поля F в новый массив.which will initialize the field F to this new array. Можно также использовать Type.InvokeMember для задания позиции в массиве, указав индекс значения, а затем следующее значение с помощью следующего кода: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);

Это изменит строку "z" в массиве, который F содержит строку "b".This will change string "z" in the array that F holds to string "b".

Примечание

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, этот метод можно использовать для доступа к не являющимся открытыми членам, если вызывающей стороне был предоставлен ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess флаг, и если набор прав, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством сочетани.Starting with the .NET Framework 2.0 с пакетом обновления 1 (SP1).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. (См. раздел вопросы безопасности для отражения.)(See Security Considerations for Reflection.)

Для применения этих функциональных возможностей приложение должно использовать .NET Framework 3,5.NET Framework 3.5 или более поздние версии.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Безопасность

ReflectionPermission
для доступа к членам, не являющимся открытыми, независимо от набора их разрешений.for accessing non-public members regardless of their grant set. Связанное перечисление:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
для вызова неуправляемого кода.to call unmanaged code. Связанное перечисление:UnmanagedCodeAssociated enumeration: UnmanagedCode

Дополнительно

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

Вызывает указанный член, соответствующий заданным ограничениям привязки и указанному списку аргументов.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

Параметры

name
String String String

Строка, содержащая имя вызываемого элемента — конструктора, метода, свойства или поля.The string containing the name of the constructor, method, property, or field member to invoke.

- или --or- Пустая строка ("") — в этом случае будет вызван член по умолчанию.An empty string ("") to invoke the default member.

- или --or- Для членов IDispatch — строка, представляющая идентификатор DispID, например "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.A bitwise combination of the enumeration values that specify how the search is conducted. Тип доступа может быть обозначен одним из флагов BindingFlags, например Public, NonPublic, Private, InvokeMethod, GetField и т.д.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Тип поиска указывать необязательно.The type of lookup need not be specified. Если тип поиска не указан, используются флаги BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Объект, определяющий набор свойств и разрешающий привязку, что может включать выбор перегруженных методов, приведение типов аргументов и вызов члена с помощью отражения.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.

- или --or- Пустая ссылка (Nothing в Visual Basic) для использования свойства DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Обратите внимание, что для успешного вызова перегруженных версий метода с переменными аргументами может потребоваться явное объявление объекта Binder.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Объект, для которого следует вызвать указанный член.The object on which to invoke the specified member.

args
Object[]

Массив с аргументами, передаваемыми вызываемому члену.An array containing the arguments to pass to the member to invoke.

Возвраты

Объект, представляющий возвращаемое значение вызываемого элемента.An object representing the return value of the invoked member.

Реализации

Исключения

invokeAttr не содержит CreateInstance, а name равно null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr не является допустимым атрибутом BindingFlags.invokeAttr is not a valid BindingFlags attribute.

- или --or- invokeAttr не содержит одного из следующих флагов привязки: InvokeMethod, CreateInstance, GetField, SetField, GetProperty или SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

-или--or- invokeAttr содержит CreateInstance в сочетании с InvokeMethod, GetField, SetField, GetProperty или SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- или --or- invokeAttr содержит как GetField, так и SetField.invokeAttr contains both GetField and SetField.

- или --or- invokeAttr содержит как GetProperty, так и SetProperty.invokeAttr contains both GetProperty and SetProperty.

- или --or- invokeAttr содержит InvokeMethod в сочетании с SetField или SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- или --or- invokeAttr содержит SetField, а args содержит более одного элемента.invokeAttr contains SetField and args has more than one element.

- или --or- Этот метод вызывается для объекта COM, и один из следующих флагов привязки не был передан: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty или 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.

-или--or- Один из массивов именованных параметров содержит строку, имеющую значение null.One of the named parameter arrays contains a string that is null.

Указанный член является инициализатором класса.The specified member is a class initializer.

Невозможно найти поле или свойство.The field or property cannot be found.

Невозможно найти метод, который соответствует аргументам в args.No method can be found that matches the arguments in args.

- или --or- Текущий объект Type представляет тип, содержащий параметры открытого типа, то есть ContainsGenericParameters возвращает true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Невозможно вызвать указанный член для target.The specified member cannot be invoked on target.

Несколько методов соответствуют критериям привязки.More than one method matches the binding criteria.

Платформа .NET Compact Framework сейчас не поддерживает этот метод.The .NET Compact Framework does not currently support this method.

Метод, представленный name, имеет один или несколько незаданных параметров универсального типа.The method represented by name has one or more unspecified generic type parameters. То есть свойство ContainsGenericParameters метода возвращает true.That is, the method's ContainsGenericParameters property returns true.

Примеры

В следующем примере используется InvokeMember для доступа к членам типа.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.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

Комментарии

Примечание

Нельзя использовать InvokeMember для вызова универсального метода.You cannot use InvokeMember to invoke a generic method.

Для определения BindingFlags элементов, включаемых в поиск, можно использовать следующие флаги фильтра:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Укажите BindingFlags.Public , чтобы включить в поиск открытые члены.Specify BindingFlags.Public to include public members in the search.

  • Укажите BindingFlags.NonPublic , чтобы в поиск включались не являющиеся открытыми члены (т. е. закрытые и защищенные члены).Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • Укажите BindingFlags.FlattenHierarchy , чтобы включить статические элементы вверх по иерархии.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Для изменения BindingFlags работы поиска можно использовать следующие флаги модификаторов:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCaseзначение, чтобы игнорировать регистр name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlyзначение Type, чтобы искать только члены, объявленные в, а не члены, которые были просто унаследованы.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Для обозначения BindingFlags действия, выполняемого с элементом, можно использовать следующие флаги вызова:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstanceдля вызова конструктора.CreateInstance to invoke a constructor. nameигнорируется.name is ignored. Недопустимый с другими флагами вызова.Not valid with other invocation flags.

  • InvokeMethodдля вызова метода, но не конструктора или инициализатора типа.InvokeMethod to invoke a method, but not a constructor or a type initializer. Недопустимо с SetField или SetProperty.Not valid with SetField or SetProperty. Если InvokeMethod указывается сама по себе BindingFlags.Instance, BindingFlags.Public,, и BindingFlags.Static автоматически включаются.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldдля получения значения поля.GetField to get the value of a field. Не является допустимым для SetField.Not valid with SetField.

  • SetFieldдля задания значения поля.SetField to set the value of a field. Не является допустимым для GetField.Not valid with GetField.

  • GetPropertyдля получения свойства.GetProperty to get a property. Не является допустимым для SetProperty.Not valid with SetProperty.

  • SetPropertyдля задания свойства.SetProperty to set a property. Не является допустимым для GetProperty.Not valid with GetProperty.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Метод будет вызываться, если выполняются оба следующих условия.A method will be invoked if both of the following conditions are true:

  • Число параметров в объявлении метода равно числу аргументов в args массиве (если только аргументы по умолчанию не определены для элемента и BindingFlags.OptionalParamBinding не указаны).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).

  • Тип каждого аргумента может быть преобразован связывателем в тип параметра.The type of each argument can be converted by the binder to the type of the parameter.

Связыватель найдет все методы сопоставления.The binder will find all of the matching methods. Эти методы находятся в зависимости от типа запрашиваемой привязки (BindingFlags значения InvokeMethod, GetPropertyи т. д.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Набор методов фильтруется по имени, числу аргументов и набору модификаторов поиска, определенных в связывателе.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

После выбора метода вызывается метод.After the method is selected, it is invoked. На этом этапе проверяется доступность.Accessibility is checked at that point. Поиск может управлять тем, какой набор методов выполняется в зависимости от атрибута доступности, связанного с методом.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Binder.BindToMethod МетодBinder класса отвечает за выбор вызываемого метода.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Связыватель по умолчанию выбирает наиболее конкретное соответствие.The default binder selects the most specific match.

Ограничения доступа игнорируются для полностью доверенного кода. Это значит, что доступ к частным конструкторам, методам, полям и свойствам можно получить и System.Reflection вызвать при каждом полном доверии кода.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.

Можно использовать Type.InvokeMember для задания поля в определенном значении, указав BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Например, если нужно задать поле открытого экземпляра с именем F для класса C, а F — String, можно использовать такой код: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"});

Если F — String[], можно использовать такой код: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"}});

что приведет к инициализации поля F в новый массив.which will initialize the field F to this new array. Можно также использовать Type.InvokeMember для задания позиции в массиве, указав индекс значения, а затем следующее значение с помощью следующего кода: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"});

Это изменит строку "z" в массиве, который F содержит строку "b".This will change string "z" in the array that F holds to string "b".

При вызове IDispatch члена можно указать DISPID вместо имени члена, используя формат строки "[DispID = # #]".When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". Например, если DISPID Микоммесод имеет значение 3, можно указать строку "[DISPID = 3]" вместо "Микоммесод".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Вызов члена по DISPID выполняется быстрее, чем поиск члена по имени.Invoking a member by DispID is faster than looking up the member by name. В сложных сценариях статистической обработки идентификатор DispID иногда является единственным способом вызова нужного члена.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Примечание

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, этот метод можно использовать для доступа к не являющимся открытыми членам, если вызывающей стороне был предоставлен ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess флаг, и если набор прав, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством сочетани.Starting with the .NET Framework 2.0 с пакетом обновления 1 (SP1).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. (См. раздел вопросы безопасности для отражения.)(See Security Considerations for Reflection.)

Для применения этих функциональных возможностей приложение должно использовать .NET Framework 3,5.NET Framework 3.5 или более поздние версии.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Безопасность

ReflectionPermission
для доступа к членам, не являющимся открытыми, независимо от набора их разрешений.for accessing non-public members regardless of their grant set. Связанное перечисление:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
для вызова неуправляемого кода.to call unmanaged code. Связанное перечисление:UnmanagedCodeAssociated enumeration: UnmanagedCode

Дополнительно

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

Вызывает указанный член, соответствующий заданным ограничениям привязки, списку аргументов, а также языку и региональным параметрам.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

Параметры

name
String String String

Строка, содержащая имя вызываемого элемента — конструктора, метода, свойства или поля.The string containing the name of the constructor, method, property, or field member to invoke.

- или --or- Пустая строка ("") — в этом случае будет вызван член по умолчанию.An empty string ("") to invoke the default member.

- или --or- Для членов IDispatch — строка, представляющая идентификатор DispID, например "[DispID=3]".For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.A bitwise combination of the enumeration values that specify how the search is conducted. Тип доступа может быть обозначен одним из флагов BindingFlags, например Public, NonPublic, Private, InvokeMethod, GetField и т.д.The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. Тип поиска указывать необязательно.The type of lookup need not be specified. Если тип поиска не указан, используются флаги BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static.If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

Объект, определяющий набор свойств и разрешающий привязку, что может включать выбор перегруженных методов, приведение типов аргументов и вызов члена с помощью отражения.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.

- или --or- Пустая ссылка (Nothing в Visual Basic) для использования свойства DefaultBinder.A null reference (Nothing in Visual Basic), to use the DefaultBinder. Обратите внимание, что для успешного вызова перегруженных версий метода с переменными аргументами может потребоваться явное объявление объекта Binder.Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

Объект, для которого следует вызвать указанный член.The object on which to invoke the specified member.

args
Object[]

Массив с аргументами, передаваемыми вызываемому члену.An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

Объект, представляющий используемые языковые стандарты глобализации. Его задание может понадобиться для выполнения преобразований, зависящих от языкового стандарта, например преобразования числовой строки String к типу 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.

- или --or- Пустая ссылка (Nothing в Visual Basic) для использования объекта CultureInfo текущего потока.A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

Возвраты

Объект, представляющий возвращаемое значение вызываемого элемента.An object representing the return value of the invoked member.

Реализации

Исключения

invokeAttr не содержит CreateInstance, а name равно null.invokeAttr does not contain CreateInstance and name is null.

invokeAttr не является допустимым атрибутом BindingFlags.invokeAttr is not a valid BindingFlags attribute.

-или--or- invokeAttr не содержит одного из следующих флагов привязки: InvokeMethod, CreateInstance, GetField, SetField, GetProperty или SetProperty.invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- или --or- invokeAttr содержит CreateInstance в сочетании с InvokeMethod, GetField, SetField, GetProperty или SetProperty.invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

-или--or- invokeAttr содержит как GetField, так и SetField.invokeAttr contains both GetField and SetField.

-или--or- invokeAttr содержит как GetProperty, так и SetProperty.invokeAttr contains both GetProperty and SetProperty.

- или --or- invokeAttr содержит InvokeMethod в сочетании с SetField или SetProperty.invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- или --or- invokeAttr содержит SetField, а args содержит более одного элемента.invokeAttr contains SetField and args has more than one element.

-или--or- Этот метод вызывается для объекта COM, и один из следующих флагов привязки не был передан: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty или 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.

-или--or- Один из массивов именованных параметров содержит строку, имеющую значение null.One of the named parameter arrays contains a string that is null.

Указанный член является инициализатором класса.The specified member is a class initializer.

Невозможно найти поле или свойство.The field or property cannot be found.

Невозможно найти метод, который соответствует аргументам в args.No method can be found that matches the arguments in args.

- или --or- Текущий объект Type представляет тип, содержащий параметры открытого типа, то есть ContainsGenericParameters возвращает true.The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

Невозможно вызвать указанный член для target.The specified member cannot be invoked on target.

Несколько методов соответствуют критериям привязки.More than one method matches the binding criteria.

Метод, представленный name, имеет один или несколько незаданных параметров универсального типа.The method represented by name has one or more unspecified generic type parameters. То есть свойство ContainsGenericParameters метода возвращает true.That is, the method's ContainsGenericParameters property returns true.

Комментарии

Хотя связыватель по умолчанию не CultureInfo обрабатывается culture (параметр), можно использовать абстрактный System.Reflection.Binder класс для написания пользовательского связывателя, который обрабатывает 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.

Примечание

Нельзя использовать InvokeMember для вызова универсального метода.You cannot use InvokeMember to invoke a generic method.

Для определения BindingFlags элементов, включаемых в поиск, можно использовать следующие флаги фильтра:The following BindingFlags filter flags can be used to define which members to include in the search:

  • Укажите BindingFlags.Public , чтобы включить в поиск открытые члены.Specify BindingFlags.Public to include public members in the search.

  • Укажите BindingFlags.NonPublic , чтобы в поиск включались не являющиеся открытыми члены (т. е. частные, внутренние и защищенные члены).Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • Укажите BindingFlags.FlattenHierarchy , чтобы включить статические элементы вверх по иерархии.Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

Для изменения BindingFlags работы поиска можно использовать следующие флаги модификаторов:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCaseзначение, чтобы игнорировать регистр name.BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlyзначение Type, чтобы искать только члены, объявленные в, а не члены, которые были просто унаследованы.BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

Для обозначения BindingFlags действия, выполняемого с элементом, можно использовать следующие флаги вызова:The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstanceдля вызова конструктора.CreateInstance to invoke a constructor. nameигнорируется.name is ignored. Недопустимый с другими флагами вызова.Not valid with other invocation flags.

  • InvokeMethodдля вызова метода, но не конструктора или инициализатора типа.InvokeMethod to invoke a method, but not a constructor or a type initializer. Недопустимо с SetField или SetProperty.Not valid with SetField or SetProperty. Если InvokeMethod указывается сама по себе BindingFlags.Instance, BindingFlags.Public,, и BindingFlags.Static автоматически включаются.If InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldдля получения значения поля.GetField to get the value of a field. Не является допустимым для SetField.Not valid with SetField.

  • SetFieldдля задания значения поля.SetField to set the value of a field. Не является допустимым для GetField.Not valid with GetField.

  • GetPropertyдля получения свойства.GetProperty to get a property. Не является допустимым для SetProperty.Not valid with SetProperty.

  • SetPropertyдля задания свойства.SetProperty to set a property. Не является допустимым для GetProperty.Not valid with GetProperty.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Метод будет вызываться, если выполняются оба следующих условия.A method will be invoked if both of the following conditions are true:

  • Число параметров в объявлении метода равно числу аргументов в args массиве (если только аргументы по умолчанию не определены для элемента и BindingFlags.OptionalParamBinding не указаны).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).

  • Тип каждого аргумента может быть преобразован связывателем в тип параметра.The type of each argument can be converted by the binder to the type of the parameter.

Связыватель найдет все методы сопоставления.The binder will find all of the matching methods. Эти методы находятся в зависимости от типа запрашиваемой привязки (BindingFlags значения InvokeMethod, GetPropertyи т. д.).These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). Набор методов фильтруется по имени, числу аргументов и набору модификаторов поиска, определенных в связывателе.The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

После выбора метода вызывается метод.After the method is selected, it is invoked. На этом этапе проверяется доступность.Accessibility is checked at that point. Поиск может управлять тем, какой набор методов выполняется в зависимости от атрибута доступности, связанного с методом.The search may control which set of methods are searched based upon the accessibility attribute associated with the method. Binder.BindToMethod МетодBinder класса отвечает за выбор вызываемого метода.The Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. Связыватель по умолчанию выбирает наиболее конкретное соответствие.The default binder selects the most specific match.

Ограничения доступа игнорируются для полностью доверенного кода. Таким образом, закрытые конструкторы, методы, поля и свойства могут быть доступны и вызываться посредством отражения всякий раз, когда код полностью надежен.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.

Можно использовать Type.InvokeMember для задания поля в определенном значении, указав BindingFlags.SetField.You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. Например, если вы хотите задать поле открытого экземпляра с именем F для класса C, а F — это String , можно использовать такой код: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);

Если F — String[], можно использовать такой код: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);

что приведет к инициализации поля F в новый массив.which will initialize the field F to this new array. Можно также использовать Type.InvokeMember для задания позиции в массиве, указав индекс значения, а затем следующее значение с помощью следующего кода: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);

Это изменит строку "z" в массиве, который F содержит строку "b".This will change string "z" in the array that F holds to string "b".

При вызове IDispatch члена можно указать DISPID вместо имени члена, используя формат строки "[DispID = # #]".When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". Например, если DISPID Микоммесод имеет значение 3, можно указать строку "[DISPID = 3]" вместо "Микоммесод".For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". Вызов члена по DISPID выполняется быстрее, чем поиск члена по имени.Invoking a member by DispID is faster than looking up the member by name. В сложных сценариях статистической обработки идентификатор DispID иногда является единственным способом вызова нужного члена.In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

Примечание

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, этот метод можно использовать для доступа к не являющимся открытыми членам, если вызывающей стороне был предоставлен ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess флаг, и если набор прав, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством сочетани.Starting with the .NET Framework 2.0 с пакетом обновления 1 (SP1).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. (См. раздел вопросы безопасности для отражения.)(See Security Considerations for Reflection.)

Для применения этих функциональных возможностей приложение должно использовать .NET Framework 3,5.NET Framework 3.5 или более поздние версии.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Безопасность

ReflectionPermission
для доступа к членам, не являющимся открытыми, независимо от набора их разрешений.for accessing non-public members regardless of their grant set. Связанное перечисление:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
для вызова неуправляемого кода.to call unmanaged code. Связанное перечисление:UnmanagedCodeAssociated enumeration: UnmanagedCode

Дополнительно

Применяется к