TypeDelegator.InvokeMember 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
调用指定的成员。 在指定的活页夹和调用属性的约束下,要调用的方法必须为可访问,并且提供与指定的自变量列表最具体的匹配。
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
调用属性。 这必须是下列之一:BindingFlags、InvokeMethod
、CreateInstance
、Static
、GetField
、SetField
、GetProperty
或 SetProperty
。 必须指定合适的调用属性。 如果要调用静态成员,则必须设置 Static
标志。
- binder
- Binder
一个对象,它启用绑定、对自变量类型的强制、对成员的调用,以及通过反射对 MemberInfo
对象的检索。 如果 binder
为 null
,则使用默认联编程序。 请参阅 Binder。
- target
- Object
对其调用指定成员的对象。
- args
- Object[]
Object
类型的数组,包含要调用的成员参数的数目、顺序和类型。 如果 args
包含未初始化的 Object
,则它被视为空,用默认联编程序可将它扩展为 0、0.0 或一个字符串。
- modifiers
- ParameterModifier[]
ParameterModifier
类型的数组,其长度与 args
相同,其元素表示与要调用的成员参数关联的属性。 参数在成员的签名中有与其关联的属性。 对于 ByRef,请使用 ParameterModifier.ByRef
;对于空,请使用 ParameterModifier.None
。 默认联编程序执行与这些内容的精确匹配。
In
和 InOut
这样的属性不用于绑定,可以使用 ParameterInfo
查看它们。
- culture
- CultureInfo
用于控制类型强制的 CultureInfo
的实例。 类型强制在某些情况下是必要的,例如将表示 1000 的字符串转换为 Double 值,因为不同的区域性表示 1000 的方式不同。 如果 culture
为 null
,则使用当前线程的 CultureInfo 的 CultureInfo。
- namedParameters
- String[]
一个字符串数组,包含与 args
数组匹配的参数名(从元素零开始)。 数组中不能有空缺。 如果 args
.
Length
大于 namedParameters
。
Length
,则按顺序填充剩余的参数。
返回
表示被调用成员的返回值的 Object
。
注解
如果满足以下两个条件,则将调用 方法:
除非在成员) 上定义了默认参数,否则方法声明中的参数数等于指定参数列表中的参数数 (。
每个参数的类型都可以由绑定器转换为参数的类型。
绑定器将查找所有匹配的方法。 这些方法基于请求的绑定类型 (BindingFlags.MethodInvoke
、 BindingFlags.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"});