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"});