1. 举例:
  2. Type tDate = typeof(System.DateTime);
  3. Object result = tDate.InvokeMember("Now",
  4. BindingFlags.GetProperty, null, null, new Object[]);
  5. Console.WriteLine(result.ToString());
  6.  
  7. 2 /*注意:下面备注的方法都是其他类的方法,比如:TestClass类方法*/
  8. TestClass tc = new TestClass (); //AddUp为tc的方法
  9. tc.GetType().InvokeMember ("AddUp", BindingFlags.Public |
  10. BindingFlags.Instance | BindingFlags.CreateInstance,
  11. null, tc, new object [] {});
  12. /*
  13. public void AddUp ()
  14. {
  15. methodCalled++;
  16. Console.WriteLine ("AddUp Called {0} times", methodCalled);
  17. }
  18. */
  19. //----------------------------下面传参数 执行ComputeSum方法 带有两个参数
  20. Type t = typeof (TestClass);
  21. object [] args = new object [] {100.09, 184.45};
  22. object result = t.InvokeMember ("ComputeSum", BindingFlags.InvokeMethod, null, null, args);
  23. /*
  24. public static double ComputeSum (double d1, double d2)
  25. {
  26. return d1 + d2;
  27. }
  28. */
  29. //-----------SayHello为静态方法调用
  30. t.InvokeMember ("SayHello", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object [] {});
  31. //-----------实例方法调用
  32. TestClass c = new TestClass ();
  33. c.GetType().InvokeMember ("AddUp", BindingFlags.InvokeMethod, null, c, new object [] {});
  34.  
  35. c.GetType().InvokeMember ("AddUp", BindingFlags.Public |
  36. BindingFlags.Instance | BindingFlags.CreateInstance,
  37. null, c, new object [] {});
  38.  
  39. //----------获取字段
  40. result = t.InvokeMember ("Name", BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});
  41. result = t.InvokeMember ("Value", BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});
  42. /*
  43. public String Name;
  44. public Object Value
  45. {
  46. get
  47. {
  48. return "the value";
  49. }
  50. }
  51. */
  52. result = t.InvokeMember ("Name", BindingFlags.GetField, null, c, new object [] {});
  53. //---------设置字段
  54. t.InvokeMember ("Name", BindingFlags.SetField, null, c, new object [] {"NewName"}); //NewName设置的属性值
  55. //---------调用类方法 带参数
  56. object[] argValues = new object [] {"Mouse", "Micky"};
  57. String [] argNames = new String [] {"lastName", "firstName"};
  58. t.InvokeMember ("PrintName", BindingFlags.InvokeMethod, null, null, argValues, null, null, argNames);
  59. /*
  60. public static void PrintName (String firstName, String lastName)
  61. {
  62. Console.WriteLine ("{0},{1}", lastName,firstName);
  63. }
  64. */
  65. TestClass obj = new TestClass();
  66. System.Reflection.MethodInfo methInfo =
  67. obj.GetType().GetMethod("PrintName");
  68. methInfo.Invoke(obj,BindingFlags.SuppressChangeType |
  69. BindingFlags.InvokeMethod, null,new object[]
  70. {"Brad","Smith"},null);
  71.  
  72. methInfo = obj.GetType().GetMethod("PrintName");
  73. methInfo.Invoke(obj,BindingFlags.IgnoreCase | //忽略大小写 指定当绑定时不应考虑成员名的大小写
  74. BindingFlags.InvokeMethod, null,new object[]
  75. {"brad","smith"},null);
  76.  
  77. methInfo = obj.GetType().GetMethod("PrintName");
  78. methInfo.Invoke(obj,BindingFlags.IgnoreReturn | // 在 COM interop 中用于指定可以忽略成员的返回值
  79. BindingFlags.InvokeMethod, null,new object[]
  80. {"Brad","Smith"},null);
  81.  
  82. methInfo = obj.GetType().GetMethod("PrintName");
  83. methInfo.Invoke(obj,BindingFlags.OptionalParamBinding |
  84. BindingFlags.InvokeMethod, null,new object[]
  85. {"Brad","Smith"},null);
  86.  
  87. // BindingFlags.ExactBinding
  88. methInfo = obj.GetType().GetMethod("PrintName");
  89. methInfo.Invoke(obj,BindingFlags.ExactBinding |
  90. BindingFlags.InvokeMethod, null,new object[]
  91. {"Brad","Smith"},null);
  92.  
  93. // BindingFlags.FlattenHierarchy
  94. methInfo = obj.GetType().GetMethod("PrintName");
  95. methInfo.Invoke(obj,BindingFlags.FlattenHierarchy |
  96. BindingFlags.InvokeMethod, null,new object[]
  97. {"Brad","Smith"},null);
  98. //----------调用一个默认的方法
  99. Type t3 = typeof (TestClass2);
  100. /*
  101. [DefaultMemberAttribute ("PrintTime")]
  102. public class TestClass2
  103. {
  104. public void PrintTime ()
  105. {
  106. Console.WriteLine (DateTime.Now);
  107. }
  108. }
  109. */
  110. t3.InvokeMember ("", BindingFlags.InvokeMethod | BindingFlags.Default, null, new TestClass2(), new object [] {});
  111. //---------调用一个引用方法
  112. MethodInfo m = t.GetMethod("Swap");
  113. args = new object[];
  114. args[] = ;
  115. args[] = ;
  116. m.Invoke(new TestClass(),args);
  117. /*
  118. public void Swap(ref int a, ref int b) 交换 a b
  119. {
  120. int x = a;
  121. a = b;
  122. b = x;
  123. }
  124. */

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

  1. c# Type.InvokeMember用法

    函数原型: public object InvokeMember(string, BindingFlags, Binder, object, object[]);string:你所要调用的函数名Bin ...

  2. 【C#反射】Type的用法

    Type属性的应用 Type type = typeof(MyClass); Console.Write("$类型名:{ type.Name}"); Console.Write(& ...

  3. Postman用法简介

    转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...

  4. [转帖]linux lsof 用法简介

    linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...

  5. C++ Json工具--Jsoncpp用法简介

    文章目录 Json简介 用法简介 数据类型 C++代码示例 代码执行输出结果 JSON在线解析及格式化验证 - JSON.cn Json简介 JSON(JavaScript Object Notati ...

  6. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  7. JodaTime用法简介

    JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...

  8. Activator.CreateInstance 方法 (Type) 的用法

    转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) ...

  9. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

随机推荐

  1. 基于REST架构的Web Service设计

    来自: http://www.williamlong.info/archives/1728.html 先前我曾经介绍过利用Apache Axis实现基于SOAP的Web Service实现技术和相关代 ...

  2. TCPCopy 应用

    TCPCopy 使用方法 TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线请求导入到测试系统中去.目前此工具已经广泛应用于国内各大互联网公司. TCPCopy七大功能1) ...

  3. 修改php执行用户,并使其拥有root权限

    useradd apachephp vi /etc/httpd/conf/httpd.conf 将组和用户修改成apachephp,重启apache,然后用lsof -i:80查看apache的执行用 ...

  4. memcache 缓存的批量删除方案(转)

    memcache 默认只支持使用delete(key)和 flush_all,这两种方法都太极端了,不能满足用户的特定需求,如:批量删除‘aaaaaaaa_’开头的所有缓存,这个时候该怎么办? 1 g ...

  5. 操作sqlserver数据库常用的三个方法

    1. ADO.NET -> 连接字符串,常用的两种方式: server=计算机名或ip\实例名;database=数据库名;uid=sa;pwd=密码; server=计算机名或ip\实例名;d ...

  6. 使用XtraGrid自定义列计算1 z

    Devexpress控件集提供的DataGrid控件,在功能和界面样式上都完爆WinForm的DataGridView控件,以前需要在 DataGridView控件上进行某列的统计,需要在GridVi ...

  7. Cocos2d-x 3.0修改Android平台帧率fps - 解决游戏运行手机发热发烫问题

    使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高. 做过coco ...

  8. 纹理缓存(Texture Cache)

    纹理缓存是将纹理缓存起来方便之后的绘制工作.每一个缓存的图像的大小,颜色和区域范围都是可以被修改的.这些信息都是存储在内存中的,不用在每一次绘制的时候都发送给GPU. CCTextureCache C ...

  9. C#父类子类对象关系

    案例: 主要有Vehicle.cs  Airplane.cs   Car.cs  3个类. Car和Airplane都继承与Vehicle类.Vehicle中Drive为虚方法,可在子类中重写,父类引 ...

  10. Rotate bitmap by real angle

    tl;dr; Use GDI+ SetWorldTransform With WinAPI's SetWorldTransform you can transform the space of dev ...