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


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

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

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

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