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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
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, , pdRetvalpdOptionalи pdHasDefault. Они представляют [In], [Out], [retval], [необязательный] и параметр по умолчанию соответственно. Эти атрибуты используются различными службами взаимодействия.
- culture
- CultureInfo
Экземпляр, используемый CultureInfo для управления приведением типов. Например, culture преобразует строку, представляющую значение 1000 Double , так как 1000 представлено по-разному различными языками и региональными параметрами. Если этот параметр имеет значение null, CultureInfo используется текущий поток.
- namedParameters
- String[]
Строковый массив параметров.
Возвращаемое значение
Указанный элемент.
- Атрибуты
Исключения
Для поля setуказывается несколько аргументов.
Не удается найти поле или свойство.
Метод не найден.
Частный член вызывается без необходимости ReflectionPermission.
Примеры
В следующем примере показано, как получить значение Now свойства.
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 выбирает метод для вызова. Привязка по умолчанию выбирает наиболее конкретное совпадение.
Ограничения доступа игнорируются для полностью доверенного кода. То есть к частным конструкторам, методам, полям и свойствам можно обращаться и вызывать с помощью отражения всякий раз, когда код полностью доверяется.