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 参数具有相同的长度。 参数可以有下列属性:pdInpdOutpdRetvalpdOptionalpdHasDefault。 这些属性分别表示 [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.InvokeMethodGetProperties等) 。 方法集按名称、参数数和绑定器中定义的一组搜索修饰符进行筛选。 选择方法后,将调用该方法,此时会检查辅助功能。 搜索可以根据与方法关联的辅助功能属性控制搜索哪组方法。 BindToMethod 选择要调用的方法。 默认绑定器选择最具体的匹配项。

对于完全受信任的代码,将忽略访问限制。 也就是说,只要代码完全受信任,就可以通过反射访问和调用私有构造函数、方法、字段和属性。

适用于

另请参阅