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 选择要调用的方法。 默认绑定器选择最具体的匹配项。
对于完全受信任的代码,将忽略访问限制。 也就是说,只要代码完全受信任,就可以通过反射访问和调用私有构造函数、方法、字段和属性。
产品 | 版本 |
---|---|
.NET | Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 2.0, 2.1 |