IReflect.InvokeMember 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
调用指定的成员。
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
参数具有相同的长度。 参数可以有下列属性:pdIn
、pdOut
、pdRetval
、pdOptional
和 pdHasDefault
。 这些属性分别表示 [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.InvokeMethod、 GetProperties等) 。 方法集按名称、参数数和绑定器中定义的一组搜索修饰符进行筛选。 选择方法后,将调用该方法,此时会检查辅助功能。 搜索可以根据与方法关联的辅助功能属性控制搜索哪组方法。 BindToMethod 选择要调用的方法。 默认绑定器选择最具体的匹配项。
对于完全受信任的代码,将忽略访问限制。 也就是说,只要代码完全受信任,就可以通过反射访问和调用私有构造函数、方法、字段和属性。