TypeDelegator.InvokeMember 方法

定义

调用指定的成员。 在指定的绑定器和调用属性的约束下,必须可访问要调用的方法,并使用指定的参数列表提供最具体的匹配项。

public:
 override 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 override 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 override 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 override 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 override 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)>]
override this.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)>]
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Overrides 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项之一:InvokeMethod、、CreateInstanceStaticGetFieldSetField、或GetPropertySetProperty。 必须指定合适的调用属性。 如果要调用静态成员, Static 则必须设置标志。

binder
Binder

一个对象,它允许绑定、强制参数类型、调用成员,以及通过反射检索 MemberInfo 对象。 binder如果是null,则使用默认绑定器。 请参阅 Binder

target
Object

要对其调用指定成员的对象。

args
Object[]

一个类型 Object 数组,其中包含要调用的成员的参数的数量、顺序和类型。 如果 args 包含未初始化 Object的,则它被视为为空,其默认绑定器可以扩大为 0、0.0 或字符串。

modifiers
ParameterModifier[]

类型 ParameterModifier 与要调用的成员参数关联的元素的数组,其长度 args与要调用的成员的参数关联的元素相同。 参数在成员的签名中具有与其关联的属性。 对于 ByRef、use ParameterModifier.ByRef和 none,请使用 ParameterModifier.None。 默认绑定器对这些绑定器执行完全匹配。 属性(如 In 绑定和 InOut 未在绑定中使用),可以使用 ParameterInfo

culture
CultureInfo

用于控制类型的强制的实例 CultureInfo 。 例如,若要将表示 1000 Double 的字符串转换为值,因为 1000 以不同的区域性以不同的方式表示这一点是必需的。 如果是culture,则null使用当前线程的CultureInfoCultureInfo

namedParameters
String[]

一个字符串数组,其中包含与数组匹配的参数名称,从元素零 args 开始。 数组中不得有孔。 如果 argsLength 大于 namedParametersLength,其余参数按顺序填充。

返回

一个 Object 表示已调用成员的返回值。

属性

注解

如果满足以下两个条件,将调用一个方法:

  • 方法声明中的参数数等于指定参数列表中的参数数(除非对成员定义了默认参数)。

  • 绑定器可以将每个参数的类型转换为参数的类型。

绑定器将查找所有匹配的方法。 根据请求的绑定类型(BindingFlags.MethodInvokeBindingFlags.GetProperties等等)找到这些方法。 方法集按名称、参数数和绑定器中定义的一组搜索修饰符进行筛选。

选择该方法后,将调用该方法。 此时会检查辅助功能。 搜索可以控制基于与该方法关联的辅助功能属性搜索哪些方法集。 该方法 Binder.BindToMethod 负责选择要调用的方法。 默认绑定器选择最具体的匹配项。

注释

对于完全受信任的代码,将忽略访问限制。 也就是说,每当完全信任代码时,都可以使用反射访问和调用专用构造函数、方法、字段和属性。

目前,InvokeMember对每种类型的对象执行Microsoft .NET框架反射语义。

如果按名称指定的成员是数组,并且 BindingFlags.GetField 设置了标志 invokeAttr,则 args 数组指定要返回其值的元素。 例如,以下通过 Type 对象的 t 调用返回字符串数组 MyArray 的第一个元素的值,该元素是调用对象的成员:

String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});

可用于 InvokeMember 设置成员数组的一个或多个元素。 所有元素都设置为相同的值。 数组 args 的格式必须如下所示:

{index1,
    index2,, value}

例如,若要从上一个示例中设置 MyArray 的第一个成员,语法如下所示:

t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new
    Variant[]{0,"Updated"});

适用于

另请参阅