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);
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);
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

调用属性。 这必须是下列之一:BindingFlagsInvokeMethodCreateInstanceStaticGetFieldSetFieldGetPropertySetProperty。 必须指定合适的调用属性。 如果要调用静态成员,则必须设置 Static 标志。

binder
Binder

一个对象,它启用绑定、对自变量类型的强制、对成员的调用,以及通过反射对 MemberInfo 对象的检索。 如果 bindernull,则使用默认联编程序。 请参阅 Binder

target
Object

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

args
Object[]

Object 类型的数组,包含要调用的成员参数的数目、顺序和类型。 如果 args 包含未初始化的 Object,则它被视为空,用默认联编程序可将它扩展为 0、0.0 或一个字符串。

modifiers
ParameterModifier[]

ParameterModifier 类型的数组,其长度与 args 相同,其元素表示与要调用的成员参数关联的属性。 参数在成员的签名中有与其关联的属性。 对于 ByRef,请使用 ParameterModifier.ByRef;对于空,请使用 ParameterModifier.None。 默认联编程序执行与这些内容的精确匹配。 InInOut 这样的属性不用于绑定,可以使用 ParameterInfo 查看它们。

culture
CultureInfo

用于控制类型强制的 CultureInfo 的实例。 类型强制在某些情况下是必要的,例如将表示 1000 的字符串转换为 Double 值,因为不同的区域性表示 1000 的方式不同。 如果 culturenull,则使用当前线程的 CultureInfoCultureInfo

namedParameters
String[]

一个字符串数组,包含与 args 数组匹配的参数名(从元素零开始)。 数组中不能有空缺。 如果 args. Length 大于 namedParametersLength,则按顺序填充剩余的参数。

返回

表示被调用成员的返回值的 Object

注解

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

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

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

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

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

注意

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

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

如果 name 指定的成员是数组, 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"});  

适用于

另请参阅