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);
[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、、CreateInstanceStatic、GetField、SetField、或GetPropertySetProperty。 必须指定合适的调用属性。 如果要调用静态成员, Static 则必须设置标志。
- 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使用当前线程的CultureInfo。CultureInfo
- namedParameters
- String[]
一个字符串数组,其中包含与数组匹配的参数名称,从元素零 args 开始。 数组中不得有孔。 如果 args。
Length 大于 namedParameters。
Length,其余参数按顺序填充。
返回
一个 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"});