Поделиться через


TypeDelegator.InvokeMember Метод

Определение

Вызывает указанный член. Вызываемый метод должен быть доступен и обеспечивать наиболее точное соответствие заданному списку аргументов с учетом ограничений заданного модуля привязки и атрибутов вызова.

public:
 override System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public override object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public override object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

Параметры

name
String

Имя вызываемого члена. Это может быть конструктор, метод, свойство или поле. Если передается пустая строка (""), вызывается стандартный член.

invokeAttr
BindingFlags

Атрибут вызова. Атрибут должен быть одним из следующих флагов BindingFlags: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty или SetProperty. Необходимо указать подходящий атрибут вызова. Для вызова статического члена должен быть установлен флаг Static.

binder
Binder

Объект, позволяющий осуществлять привязку, приведение типов аргументов, вызов элементов, а также поиск объектов MemberInfo с помощью отражения. Если значение параметра binder равно null, используется связыватель по умолчанию. См. раздел Binder.

target
Object

Объект, для которого следует вызвать указанный член.

args
Object[]

Массив объектов типа Object, содержащий число, последовательность и тип параметров, получаемых вызываемым методом. Если параметр args содержит не инициализированный объект Object, он обрабатывается как пустой и может быть преобразован стандартным связывателем в 0, 0,0 или строку.

modifiers
ParameterModifier[]

Массив типа ParameterModifier такой же длины, как и массив args, элементы которого представляют атрибуты, соответствующие параметрам вызываемого метода. С параметром связаны атрибуты в сигнатуре члена. Для параметра ByRef следует использовать параметр ParameterModifier.ByRef, а при отсутствии параметра — параметр ParameterModifier.None. Связыватель по умолчанию выбирает точное совпадение. Такие атрибуты, как In и InOut, не используются в привязке и могут быть просмотрены с помощью свойства ParameterInfo.

culture
CultureInfo

Экземпляр объекта CultureInfo , используемого для управления приведением типов. Он необходим, например, для преобразования строки, которая представляет число 1000, в значение типа Double, поскольку в разных культурах 1000 может быть представлено по-разному. Если параметр culture имеет значение null, используется CultureInfo для CultureInfo текущего потока.

namedParameters
String[]

Массив строк, содержащий имена параметров, совпадающие, начиная с нулевого элемента, с массивом args. В массиве не должно быть пустых элементов. Если args. Значение Length больше значения namedParameters. Length, остальные параметры заполняются по порядку.

Возвращаемое значение

Объект Object, представляющий значение, возвращаемое указанным членом.

Комментарии

Метод будет вызываться, если выполняются оба следующих условия:

  • Число параметров в объявлении метода равно количеству аргументов в указанном списке аргументов (если аргументы по умолчанию не определены в элементе).

  • Тип каждого аргумента может быть преобразован связывателем в тип параметра .

Связыватель найдет все соответствующие методы. Эти методы находятся на основе типа запрошенной привязки (BindingFlags.MethodInvoke, BindingFlags.GetPropertiesи т. д.). Набор методов фильтруется по имени, количеству аргументов и набору модификаторов поиска, определенных в связывателье.

После выбора метода он будет вызван. На этом этапе проверяется специальные возможности. Поиск может управлять набором методов поиска на основе атрибута специальных возможностей, связанного с методом. Метод Binder.BindToMethod отвечает за выбор вызываемого метода. Связыватель по умолчанию выбирает наиболее конкретное совпадение.

Примечание

Ограничения доступа игнорируются для полностью доверенного кода. То есть к закрытым конструкторам, методам, полям и свойствам можно обращаться и вызывать с помощью отражения всякий раз, когда код является полностью доверенным.

В настоящее InvokeMember время выполняет семантику отражения Microsoft платформа .NET Framework для каждого типа объекта.

Если элемент, указанный по имени, является массивом, а BindingFlags.GetField флаг установлен в invokeAttr, args массив задает элементы, значения которых должны быть возвращены. Например, следующий вызов через Type объект t возвращает значение первого элемента массива строк MyArray, который является членом вызывающего объекта:

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

Можно использовать для InvokeMember задания одного или нескольких элементов массива элементов. Все элементы имеют одно и то же значение. Массив args должен быть отформатирован следующим образом:

{index1,  
    index2,, value}  

Например, чтобы задать первый элемент MyArray из предыдущего примера, используется следующий синтаксис:

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

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

См. также раздел