InvokeMember 使用

函数原型:  
    public   object   InvokeMember(string,   BindingFlags,   Binder,   object,   object[]);  
  string:你所要调用的函数名  
  BindingFlags:你所要调用的函数的属性,可以组合  
  Binder:高级内容,可以先不看  
  object:调用该成员函数的实例  
  object[]:参数,  
  下面是msdn例子:  
  //调用公有静态成员函数(不带参数)  
    Type   t   =   typeof   (TestClass);  
    t. InvokeMember   ("SayHello",   BindingFlags.Public   |   BindingFlags.InvokeMethod   |   BindingFlags.Static,   null,   null,   new   object   []   {});  
                     
    //调用实例的函数(不带参数),第三个参数为该实例  
    TestClass   c   =   new   TestClass   ();  
    c.GetType(). InvokeMember   ("AddUp",   BindingFlags.Public   |   BindingFlags.InvokeMethod,   null,   c,   new   object   []   {});  
    c.GetType(). InvokeMember   ("AddUp",   BindingFlags.Public   |   BindingFlags.InvokeMethod,   null,   c,   new   object   []   {});  
                     
  //调用带参数的函数,  
  //方法是:将你的所有参数都放到一个object的数组里面  
    object   []   args   =   new   object   []   {100.09,   184.45};  
    object   result;  
    result   =   t. InvokeMember   ("ComputeSum",   BindingFlags.Public   |   BindingFlags.InvokeMethod   |   BindingFlags.Static,   null,   null,   args);  
    Console.WriteLine   ("{0}   +   {1}   =   {2}",   args[0],   args[1],   result);  
                     
    //获得一个属性值  
    result   =   t. InvokeMember   ("Name",   BindingFlags.Public   |   BindingFlags.GetField,   null,   c,   new   object   []   {});  
    Console.WriteLine   ("Name   ==   {0}",   result);  
                     
    //设定一个属性值  
    t. InvokeMember   ("Name",   BindingFlags.Public   |BindingFlags.SetField,   null,   c,   new   object   []   {"NewName"});  
    result   =   t. InvokeMember   ("Name",   BindingFlags.Public   |BindingFlags.GetField,   null,   c,   new   object   []   {});  
    Console.WriteLine   ("Name   ==   {0}",   result);  
                     
    //获得一个下标属性值([])  
    int     index   =   3;  
    result   =   t. InvokeMember   ("Item",   BindingFlags.Public   |BindingFlags.GetProperty   ,   null,   c,   new   object   []   {index});  
    Console.WriteLine   ("Item[{0}]   ==   {1}",   index,   result);  
                     
    //设定一个下标属性值([])    
    index   =   3;  
    t. InvokeMember   ("Item",   BindingFlags.Public   |BindingFlags.SetProperty,   null,   c,   new   object   []   {index,   "NewValue"});  
    result   =   t. InvokeMember   ("Item",   BindingFlags.Public   |BindingFlags.GetProperty   ,   null,   c,   new   object   []   {index});  
    Console.WriteLine   ("Item[{0}]   ==   {1}",   index,   result);  
                     
    //获得一个属性或者是成员变量的值  
  //也就是,假设有一个类是这样的:  
  //class   temp{  
  //   public   string   name;    
  //   public   string   Name{    
  //         get{return   name;}  
  //         set   {name=value}  
  //   }  
  //}  
  //那么通过一下语句就可获得Name的值,  
    result   =   t. InvokeMember   ("Name",   BindingFlags.Public   |BindingFlags.GetField   |   BindingFlags.GetProperty,   null,   c,   new   object   []   {});  
    Console.WriteLine   ("Name   ==   {0}",   result);  
  //通过一下,语句可以获得name的值  
    result   =   t. InvokeMember   ("name",   BindingFlags.Public   |BindingFlags.GetField   |   BindingFlags.GetProperty,   null,   c,   new   object   []   {});  
    Console.WriteLine   ("Value   ==   {0}",   result);  
                     
    //调用一个函数,使用参数名对应的参数  
    object[]   argValues   =   new   object   []   {"Mouse",   "Micky"};  
    String   []   argNames   =   new   String   []   {"lastName",   "firstName"};  
    t. InvokeMember   ("PrintName",   BindingFlags.Public   |BindingFlags.InvokeMethod,   null,   null,   argValues,   null,   null,   argNames);  
                     
    //调用一个类型的默认函数,好像在C#里面没有默认成员函数  
    Type   t3   =   typeof   (TestClass2);  
    t3. InvokeMember   ("",   BindingFlags.Public   |BindingFlags.InvokeMethod,   null,   new   TestClass2(),   new   object   []   {});  
                     
    //Invoking   a   ByRef   member  
    MethodInfo   m   =   t.GetMethod("Swap");  
    args   =   new   object[2];  
    args[0]   =   1;  
    args[1]   =   2;  
    m.Invoke(new   TestClass(),args);  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值