Type InvokeMember()用法简介

举例:
  Type tDate = typeof(System.DateTime);
   Object result = tDate.InvokeMember("Now",
           BindingFlags.GetProperty, null, null, new Object[0]);
   Console.WriteLine(result.ToString());  

  例2:  /*注意:下面备注的方法都是其他类的方法,比如:TestClass类方法*/
  TestClass tc = new TestClass (); //AddUp为tc的方法
  tc.GetType().InvokeMember ("AddUp", BindingFlags.Public |
               BindingFlags.Instance | BindingFlags.CreateInstance,
               null, tc, new object [] {});
/*
    public void AddUp ()
       {
           methodCalled++;
           Console.WriteLine ("AddUp Called {0} times", methodCalled);
       }
*/
//----------------------------下面传参数 执行ComputeSum方法 带有两个参数
Type t = typeof (TestClass);
  object [] args = new object [] {100.09, 184.45};
  object result = t.InvokeMember ("ComputeSum", BindingFlags.InvokeMethod, null, null, args);
   /*
    public static double ComputeSum (double d1, double d2)
       {
           return d1 + d2;
       }
*/
  //-----------SayHello为静态方法调用
   t.InvokeMember ("SayHello", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object [] {});
  //-----------实例方法调用
   TestClass c = new TestClass ();
  c.GetType().InvokeMember ("AddUp", BindingFlags.InvokeMethod, null, c, new object [] {});  

  c.GetType().InvokeMember ("AddUp", BindingFlags.Public |
               BindingFlags.Instance | BindingFlags.CreateInstance,
               null, c, new object [] {});  

  //----------获取字段
   result = t.InvokeMember ("Name", BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});
   result = t.InvokeMember ("Value", BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});
/*
    public String Name;
    public Object Value
       {
           get
           {
               return "the value";
           }
       }
*/
   result = t.InvokeMember ("Name", BindingFlags.GetField, null, c, new object [] {});
  //---------设置字段
   t.InvokeMember ("Name", BindingFlags.SetField, null, c, new object [] {"NewName"}); //NewName设置的属性值
  //---------调用类方法 带参数
   object[] argValues = new object [] {"Mouse", "Micky"};
   String [] argNames = new String [] {"lastName", "firstName"};
   t.InvokeMember ("PrintName", BindingFlags.InvokeMethod, null, null, argValues, null, null, argNames);
   /*
    public static void PrintName (String firstName, String lastName)
       {
           Console.WriteLine ("{0},{1}", lastName,firstName);
       }
*/
TestClass obj = new TestClass();
System.Reflection.MethodInfo methInfo =
               obj.GetType().GetMethod("PrintName");
           methInfo.Invoke(obj,BindingFlags.SuppressChangeType |
               BindingFlags.InvokeMethod, null,new object[]
               {"Brad","Smith"},null);  

   methInfo = obj.GetType().GetMethod("PrintName");
           methInfo.Invoke(obj,BindingFlags.IgnoreCase |   //忽略大小写 指定当绑定时不应考虑成员名的大小写
               BindingFlags.InvokeMethod, null,new object[]
               {"brad","smith"},null);  

methInfo = obj.GetType().GetMethod("PrintName");
           methInfo.Invoke(obj,BindingFlags.IgnoreReturn |  // 在 COM interop 中用于指定可以忽略成员的返回值
               BindingFlags.InvokeMethod, null,new object[]
               {"Brad","Smith"},null);   

 methInfo = obj.GetType().GetMethod("PrintName");
           methInfo.Invoke(obj,BindingFlags.OptionalParamBinding |
               BindingFlags.InvokeMethod, null,new object[]
               {"Brad","Smith"},null);  

           // BindingFlags.ExactBinding
           methInfo = obj.GetType().GetMethod("PrintName");
           methInfo.Invoke(obj,BindingFlags.ExactBinding |
               BindingFlags.InvokeMethod, null,new object[]
               {"Brad","Smith"},null);  

           // BindingFlags.FlattenHierarchy
           methInfo = obj.GetType().GetMethod("PrintName");
           methInfo.Invoke(obj,BindingFlags.FlattenHierarchy |
               BindingFlags.InvokeMethod, null,new object[]
               {"Brad","Smith"},null);
  //----------调用一个默认的方法
   Type t3 = typeof (TestClass2);
/*
[DefaultMemberAttribute ("PrintTime")]
   public class TestClass2
   {
       public void PrintTime ()
       {
           Console.WriteLine (DateTime.Now);
       }
   }
*/
   t3.InvokeMember ("", BindingFlags.InvokeMethod | BindingFlags.Default, null, new TestClass2(), new object [] {});
//---------调用一个引用方法
 MethodInfo m = t.GetMethod("Swap");
  args = new object[2];
     args[0] = 1;
     args[1] = 2;
     m.Invoke(new TestClass(),args);
 /*
    public void Swap(ref int a, ref int b)  交换 a b
       {
           int x = a;
           a = b;
           b = x;
       }
 */
     
时间: 2024-08-23 08:10:11

Type InvokeMember()用法简介的相关文章

压力测试工具tsung用法简介

tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问.目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入研究过. 1.安装 tsung是用erlang编写的,所以首先安装erlang的运行环境.然后就是按照tsung的官网下载编译tsung.需要注意的是,生成测试报告需要gnuplot和perl的支持,其中perl需要安装Template扩展.具体安装过程请看相关手册或者google之. 2.配置文件 默认情况下,tsung会加载配置

display:table-cell的用法简介

display:table-cell的用法简介:display属性的使用相当频繁,比如display:block或者display:inline等,但是对于display:table-cell可能比较陌生,因为此属性在特定的情况下会发挥很大的作用,下面就简单介绍它的作用,先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="a

phpcms分页用法简介

PHPCMS分页的用法 前面需要有引用的list,代码如下: {pc:content action="lists" catid="11" order="id DESC" thumb="" moreinfo="" page="$page" num="4" cache="3600" } {loop $data $n $r} <li><

Intent用法简介

Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.直接自动调用合适的程序打开不同类型的文件等等.诸如此类,都可以通过设置Intent属性来完成. Intent主要有以下四个重要属性,它们分别为:            Action:Action属性的值为一个字符串,它代表了系统中已经定义了一系列常用的动作.通过setAction()方法或在清单文件AndroidManifest.xm

qss(stylesheet)用法简介(一)

QPushButton按钮evilButton  { background-color: red } QPushButton#evilButton { background-color: red; border-style: outset; border-width: 2px; border-color: beige; } QPushButton#evilButton { background-color: red; border-style: outset; border-width: 2px

grep用法简介之二

上一篇文章总结了一些grep基本用法.在这次的内容里介绍grep和正则表达式结合使用的方法. 首先介绍下正则表达式,正则表达式非基本和扩展两种. 名词释义:正则表达式:正则表达式其实就是描述某些复杂规则字符串的代码集合. 元字符:在正则表达式中具有特殊意义的专用字符 正则表达式 基本正则表达式元字符: ^ :表示行首    $ :表示行尾      ^$:表示空白行      * :表示星之前字符的0个或任意个字符,例如:a*:表示0个a或任意一个a的字符,所以就是全显示出来了.      .

Activator.CreateInstance 方法 (Type) 的用法

转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) 的用法 Activator.CreateInstance 方法 (Type) 使用与指定参数匹配程度最高的构造函数来创建指定类型的实例. 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) C# public static Object CreateInstance

grep用法简介之一

grep是Linux中个非常重要也是经常使用的文本搜索工具,最近又回顾学习了一遍,趁热自己总结一下. Linux中关于grep的命令一共有三个(以centos6.4为例) grep  :只支持基本正则表达式 egrep :支持扩展正则表达式,此命令其实是 "grep -E" 的别名 fgrep : 不支持正则表达式,搜索速度在3个命令中最快. grep命令用法格式: grep [OPTIONS] PATTERN [FILE...] 主要参数 --color=auto :使匹配的字符用彩

排序函数sort用法简介

排序算法有很多,冒泡排序,选择排序,堆排序,快速排序,归并排序,基数排序-- 其中平均复杂度O(nlogn)的排序算法或者在某方面有特殊优势的算法在ACM中才有实际使用价值,所以上述提到的前2种大家以后就不要用了.其他排序算法大家会慢慢接触,本文主要介绍使用最多的排序函数 sort.大家可能会遇到qsort,qsort比较复杂,逐渐淡出ACMer的视线,所以不用管它. sort函数是C++标准库函数,需要包含头文件 #include <algorithm> 并声明命名空间 using name