IReflect.InvokeMember Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывает заданный элемент.
public:
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 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 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
Public 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. Параметр invokeAttr
может быть конструктором, методом, свойством или полем. Необходимо указать подходящий атрибут вызова. Чтобы вызвать стандартный элемент класса, передайте в качестве имени элемента пустую строку ("").
- binder
- Binder
Один из битовых флагов BindingFlags. Реализует класс Binder, содержащий свойства, связанные с этим методом.
- target
- Object
Объект, для которого следует вызвать указанный член. Для статических элементов этот параметр не обрабатывается.
- args
- Object[]
Массив объектов, содержащих число, порядок и тип параметров вызываемого элемента. Если параметров нет, этот массив пуст.
- modifiers
- ParameterModifier[]
Массив объектов ParameterModifier. Массив такой же длины, что и параметр args
, предоставляющий атрибуты аргументов вызываемого члена в виде метаданных. Параметр может иметь следующие атрибуты: pdIn
, pdOut
, pdRetval
, pdOptional
и pdHasDefault
. Эти значения представляют, соответственно, параметры [In], [Out], [retval], [optional] и стандартный параметр. Эти атрибуты используются различными службами взаимодействия.
- culture
- CultureInfo
Экземпляр объекта CultureInfo , используемого для управления приведением типов. Например, параметр culture
преобразует строку, которая представляет число 1000, в значение типа Double, поскольку в разных культурах число 1000 может быть представлено по-разному. Если этот параметр имеет значение null
, для текущего потока используется объект CultureInfo.
- namedParameters
- String[]
Строковый массив параметров.
Возвращаемое значение
Заданный член.
Исключения
Для процедуры set
поля задано более одного аргумента.
Невозможно найти поле или свойство.
Не удается найти метод.
Закрытый элемент вызван без необходимого разрешения ReflectionPermission.
Примеры
В следующем примере возвращается значение Now свойства .
#using <System.DLL>
using namespace System;
using namespace System::Reflection;
#define NULL 0
void main()
{
Type^ tDate = Type::GetType( L"System.DateTime" );
Object^ result = tDate->InvokeMember( L"Now", BindingFlags::GetProperty, nullptr, NULL, gcnew array<Object^>(0) );
Console::WriteLine( result->ToString() );
}
using System;
using System.Reflection;
public class MainClass
{
public static void Main(string[] args)
{
Type tDate = typeof(System.DateTime);
Object result = tDate.InvokeMember("Now",
BindingFlags.GetProperty, null, null, new Object[0]);
Console.WriteLine(result.ToString());
}
}
Imports System.Reflection
Public Class MainClass
Public Overloads Shared Sub Main(ByVal args() As String)
Dim tDate As Type = GetType(System.DateTime)
Dim result As [Object] = tDate.InvokeMember("Now", _
BindingFlags.GetProperty, Nothing, Nothing, New [Object](-1) {})
Console.WriteLine(result.ToString())
End Sub
End Class
Комментарии
Вызываемый метод должен быть доступен и обеспечивать наиболее точное соответствие заданному списку аргументов с учетом ограничений заданного модуля привязки и атрибутов вызова.
Метод вызывается, если число параметров в объявлении метода равно количеству аргументов в указанном списке аргументов, а тип каждого аргумента может быть преобразован связывателем в тип параметра.
Примечание
Массив модификаторов параметров, передаваемых в метод, InvokeMember должен содержать один модификатор параметров. При определении того, какой аргумент должен передаваться по ссылке при доступе к COM, учитывается только первый модификатор параметров.
Связыватель находит все соответствующие методы в соответствии с типом запрошенной привязки (BindingFlags.InvokeMethod, GetPropertiesи т. д.). Набор методов фильтруется по имени, количеству аргументов и набору модификаторов поиска, определенных в связывателье. После выбора метода он вызывается и на этом этапе проверяется доступность. Поиск может управлять набором методов, в которых выполняется поиск на основе атрибута специальных возможностей, связанного с методом. BindToMethod выбирает метод для вызова. Связыватель по умолчанию выбирает наиболее конкретное совпадение.
Ограничения доступа игнорируются для полностью доверенного кода. То есть к закрытым конструкторам, методам, полям и свойствам можно обращаться и вызывать с помощью отражения всякий раз, когда код является полностью доверенным.