InvokeMember

xxxType.InvokeMember Method

这个是一个类型去反射某个方法,但是这个的好多个重载方法,长的一匹

不去好好理解,尼玛,太难受了。这不是很正常的吗?

重载1:

InvokeMember(String,BindingFlags,Binder,Object,Object[],ParameterModifier[],CultureInfo,String[])

重载2:

InvokeMember(String, BindingFlags, Binder, Object, Object[]) 

重载3:

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) 

所以这么看起来就一个需要分析,为啥?因为其他就是这个的阉割版

public abstract object InvokeMember 
(
    string name,
    System.Reflection.BindingFlags invokeAttr, 
    System.Reflection.Binder binder, 
    object target, 
    object[] args, S
    ystem.Reflection.ParameterModifier[] modifiers, 
    System.Globalization.CultureInfo culture, 
    string[] namedParameters
);

参数分析

name 故名思意就是包含要调用的构造函数、方法、属性或者字段的名称

                  构造函数 public A(){}

                  方法public void A(){}

                  属性public string A{get;set;}

                  字段public string A="";

或者用空字符串(""),表示调用默认成员

或 对于IDispatch 成员,则为一个标识DIspID 的字符串,例如"[DispID=1]"

 

invokerAttr BindingFlags

一个位屏蔽,由一个或者多个指定搜索执行方式的 BindingFlags组成。访问可以是 BindingFlags 之一,如public、nonpublic、private、InvokeMethod 和 GetField等 如果省略查找类型,则使用 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static .

Binder

一个对象,该对象定义一组属性并启动绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员

或者- 要使用DefaultBinder的空引用(在vb为nothing)。为了成功地使用变量参数来调用方法重载,可能必须显示定义Binder对象。

target Object

对其调用指定成员的对象

args Object[]

包含传递给要调用的成员的参数的数组

modifiers ParameterModifier[]

ParameterModifier对象的数组,表示与args数组中的相关元素相关的特性。参数的相关的属性存储在成员的签名中

只有调用com组件时,默认联编程序才处理此参数

culture CultureInfo

表示要使用的全局化区域设置的 CultureInfo对象,他对区域设置特定的转换可能是必须的,比如将数字string转换为double。

或-要使用当前线程nothing的空引用

namedParameters String[]

包含参数名称的数组,args 数组的值传递给这些参数。

public object InvokeMember
 (
    string name, 
    System.Reflection.BindingFlags invokeAttr, 
    System.Reflection.Binder binder, 
    object target, 
    object[] args
);

来举个例子吧

Type.InvokeMember(
                methodName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, xxx, newObject);

主要是对target不太熟悉,target就是对其调用指定成员的对象。

怎么说呢?就是说这个方法是一个类下的方法,但这个类不是静态类,这个方法也不是静态方法,那么就需要通过实例进行调用,那么target就是这个实例。建立这个实例instance的时候,用那个调用默认成员,也就是methodName为空的时候“”,就可以了。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值