IReflect.InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) Метод

Определение

Вызывает заданный элемент.Invokes a specified member.

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);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj

Параметры

name
String

Имя искомого элемента.The name of the member to find.

invokeAttr
BindingFlags

Один из атрибутов вызова BindingFlags.One of the BindingFlags invocation attributes. Параметр invokeAttr может быть конструктором, методом, свойством или полем.The invokeAttr parameter may be a constructor, method, property, or field. Необходимо указать подходящий атрибут вызова.A suitable invocation attribute must be specified. Чтобы вызвать стандартный элемент класса, передайте в качестве имени элемента пустую строку ("").Invoke the default member of a class by passing the empty string ("") as the name of the member.

binder
Binder

Один из битовых флагов BindingFlags.One of the BindingFlags bit flags. Реализует класс Binder, содержащий свойства, связанные с этим методом.Implements Binder, containing properties related to this method.

target
Object

Объект, для которого следует вызвать указанный член.The object on which to invoke the specified member. Для статических элементов этот параметр не обрабатывается.This parameter is ignored for static members.

args
Object[]

Массив объектов, содержащих число, порядок и тип параметров вызываемого элемента.An array of objects that contains the number, order, and type of the parameters of the member to be invoked. Если параметров нет, этот массив пуст.This is an empty array if there are no parameters.

modifiers
ParameterModifier[]

Массив объектов ParameterModifier.An array of ParameterModifier objects. Массив такой же длины, что и параметр args, предоставляющий атрибуты аргументов вызываемого члена в виде метаданных.This array has the same length as the args parameter, representing the invoked member's argument attributes in the metadata. Параметр может иметь следующие атрибуты: pdIn, pdOut, pdRetval, pdOptional и pdHasDefault.A parameter can have the following attributes: pdIn, pdOut, pdRetval, pdOptional, and pdHasDefault. Эти значения представляют, соответственно, параметры [In], [Out], [retval], [optional] и стандартный параметр.These represent [In], [Out], [retval], [optional], and a default parameter, respectively. Эти атрибуты используются различными службами взаимодействия.These attributes are used by various interoperability services.

culture
CultureInfo

Экземпляр объекта CultureInfo, используемого для управления приведением типов.An instance of CultureInfo used to govern the coercion of types. Например, параметр culture преобразует строку String, которая представляет число 1000, в значение типа Double, поскольку в разных культурах 1000 может быть представлено по-разному.For example, culture converts a String that represents 1000 to a Double value, since 1000 is represented differently by different cultures. Если этот параметр имеет значение null, для текущего потока используется объект CultureInfo.If this parameter is null, the CultureInfo for the current thread is used.

namedParameters
String[]

Массив параметров типа String.A String array of parameters.

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

Заданный член.The specified member.

Исключения

Для процедуры set поля задано более одного аргумента.More than one argument is specified for a field set.

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

Не удается найти метод.The method cannot be found.

Закрытый элемент вызван без необходимого разрешения ReflectionPermission.A private member is invoked without the necessary ReflectionPermission.

Примеры

В следующем примере получается значение свойства Now.The following example obtains the value of the Now property.

#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

Комментарии

Вызываемый метод должен быть доступен и обеспечивать наиболее точное соответствие заданному списку аргументов с учетом ограничений заданного модуля привязки и атрибутов вызова.The method that is to be invoked must be accessible and provide the most specific match with the specified argument list, under the constraints of the specified binder and invocation attributes.

Метод вызывается, если количество параметров в объявлении метода равно количеству аргументов в указанном списке аргументов, и тип каждого аргумента может быть преобразован связывателем в тип параметра.A method is invoked if the number of parameters in the method declaration equals the number of arguments in the specified argument list, and the type of each argument can be converted by the binder to the type of the parameter.

Примечание

Массив модификаторов параметров, переданный методу InvokeMember, должен содержать модификатор одного параметра.The array of parameter modifiers passed to the InvokeMember method must contain a single parameter modifier. При определении аргумента, который должен быть передан по ссылке при предоставлении модели COM, учитывается только первый модификатор параметра.Only the first parameter modifier is considered when determining which argument needs to be passed by reference when exposed to COM.

Связыватель находит все соответствующие методы в соответствии с типом запрашиваемой привязки (BindingFlags.InvokeMethod, GetPropertiesи т. д.).The binder finds all matching methods, in accordance with the type of binding requested (BindingFlags.InvokeMethod, GetProperties, 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, and accessibility is checked at that point. Поиск может контролировать, какой набор методов ищется в зависимости от атрибута доступности, связанного с методом.The search may control which set of methods is searched based upon the accessibility attribute associated with the method. BindToMethod выбирает вызываемый метод.BindToMethod selects 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.

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

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