zoukankan      html  css  js  c++  java
  • InvokeMember 使用(转http://blog.csdn.net/gooer/article/details/2927113)

    函数原型:   
        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);  

  • 相关阅读:
    常见树的总结
    《深入理解Java虚拟机》读书笔记(第三章)
    《Jave并发编程的艺术》学习笔记(1-2章)
    Java多线程与并发之面试常问题
    Morris遍历-如何用空间复杂度O(1)来遍历二叉树
    BFPRT算法
    Manacher
    maven基础
    play framework + sbt入门之环境搭建
    rancher部署kubernets集群
  • 原文地址:https://www.cnblogs.com/nele/p/4785222.html
Copyright © 2011-2022 走看看