1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Reflection;
  6.  
  7. namespace ConsoleApplication2
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. //TestClass.ShowMsg();
  14. //TestClass.ShowMsg(new Message());
  15.  
  16. //Assembly asm = Assembly.GetExecutingAssembly();
  17. //Object obj=asm.CreateInstance("ConsoleApplication2.Calculator",true);
  18. //Calculator cal=(Calculator)obj;
  19.  
  20. //Object[] parameters = new Object[2] { 3, 5 };
  21. //Object obj1 = asm.CreateInstance("ConsoleApplication2.Calculator", true, BindingFlags.Default, null, parameters, null, null);
  22. //Calculator cal = (Calculator)obj1;
  23.  
  24. //Type t = typeof(Calculator);
  25. //Calculator cal = new Calculator(3, 5);
  26. //int result = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, cal, null);
  27. //Console.WriteLine("result:" + result);
  28.  
  29. //Type t = typeof(Calculator);
  30. //Object[] parameters = new Object[2] { 3, 5 };
  31. //t.InvokeMember("Add", BindingFlags.InvokeMethod, null, t, parameters);
  32.  
  33. //Type t = typeof(Calculator);
  34. //Calculator cal = new Calculator(3, 5);
  35. //MethodInfo mi = t.GetMethod("Add", BindingFlags.Public | BindingFlags.Instance);
  36. //mi.Invoke(cal, null);
  37.  
  38. //Type t = typeof(Calculator);
  39. //Object[] parameters = new Object[2] { 6, 9 };
  40. //MethodInfo mi = t.GetMethod("Add", BindingFlags.Public | BindingFlags.Static);
  41. //mi.Invoke(null, parameters);
  42.  
  43. Console.ReadKey();
  44. }
  45. }
  46.  
  47. public class Message { }
  48.  
  49. public class TestClass
  50. {
  51. [Obsolete("请使用新方法")]
  52. public static void ShowMsg()
  53. {
  54. Console.WriteLine("旧MSG");
  55. }
  56.  
  57. public static void ShowMsg(Message msg)
  58. {
  59. Console.WriteLine("新MSG");
  60. }
  61. }
  62.  
  63. public class Calculator
  64. {
  65. private int x;
  66. private int y;
  67. public Calculator()
  68. {
  69. x = ;
  70. y = ;
  71. Console.WriteLine("Calculate()");
  72. }
  73.  
  74. public Calculator(int x, int y)
  75. {
  76. this.x = x;
  77. this.y = y;
  78. Console.WriteLine("Calculate(int x, int y)");
  79. }
  80.  
  81. public int Add()
  82. {
  83. int total = ;
  84. total = x + y;
  85. Console.WriteLine("invoke instance method");
  86. Console.WriteLine(string.Format("{0}+{1}={2}", x, y, total));
  87. return total;
  88. }
  89.  
  90. public static void Add(int x, int y)
  91. {
  92. int total = x + y;
  93. Console.WriteLine("invoke static method");
  94. Console.WriteLine(string.Format("{0}+{1}={2}", x, y, total));
  95. }
  96. }
  97. }

第15章 .NET中的反射的更多相关文章

  1. .Net 中的反射(序章) - Part.1

    引言 反射是.Net提供给我们的一件强力武器,尽管大多数情况下我们不常用到反射,尽管我们可能也不需要精通它,但对反射的使用作以初步了解在日后的开发中或许会有所帮助. 反射是一个庞大的话题,牵扯到的知识 ...

  2. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  3. 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化

    第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...

  4. [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦

    [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第15章:任务切换

    15章其实应该是和14章相辅相成的(感觉应该是作者觉得14章内容太多了然后切出来了一点).任务切换和14章的某些概念是分不开的. ★PART1:任务门与任务切换的方法 1. 任务管理程序 14章的时候 ...

  6. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  7. 第15章 设备无关位图_15.3 DIB和DDB的结合

    第15章 设备相关位图_15.3 DIB和DDB的结合 15.3.1 从DIB创建DDB (1)hBitmap =CreateDIBitmap(…)——注意这名称会误导,实际上创建的是DDB 参数 说 ...

  8. unix network programming(3rd)Vol.1 [第13~15章]《读书笔记系列》

    第13章 守护进程和inetd 超级服务器 syslog() daemon_init() setuid() setgid() 第14章 高级IO 标准I/O函数库,支持3种缓冲 缓冲(读写存储设备(硬 ...

  9. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

随机推荐

  1. asp.net 一次性提交大量数据,服务器会报错,要在 web.config 中设置一下

    web.config <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应 ...

  2. java写入excel文件poi

    java写入excel文件 java写入excel文件poi,支持xlsx与xls,没有文件自动创建 package com.utils; import java.io.File; import ja ...

  3. C 程序解决实际文件案例

    1,C程序参数(编写带参数 的C--argc,argv[]程序),带参数的Main程序 程序功能说明: 把命令行参数中的前一个文件名标识 的文件,复制到后一个文件名标识的文件中,如只有一个则把该文件写 ...

  4. 三剑客之SED

    Sed功能说明      Sed是Strem Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. [root@old ~]# sed --versio ...

  5. 16.C语言中数据类型的本质含义是:表示一个内存格子的长度和解析方法。

    数据类型决定长度的含义:我们一个内存地址(0x30000000),本来这个地址只代表1个字节的长度,但是实际上我们可以通过给他一个类型(int),让他有了长度(4),这样这个代表内存地址的数字(0x3 ...

  6. VIM编辑器之常用命令

     分类: vim   目录(?)[-] 第一级 存活 第二级 感觉良好 第三级  更好更强更快 更好 更强 更快 第四级 Vim 超能力 在当前行上移动光标 0   f F t T 区域选择 acti ...

  7. MySQL的高可用设计方案的记录

    一.看下常用的MySQL的高可用方案: 对上图的说明: 1)HeartBeat通过串口线或者以太网网线直连网卡对对端的服务做健康检查,并负责执行Drbd,MySQL,vip等资源的自动切换. 2)da ...

  8. 动态组合lambda 表达式

    //记录实体集合—动态组合lambda 表达式 Expression<Func<AdEntity, bool>> thirdWhere = p => p.Observer ...

  9. elasticsearch同义词及动态更新

    第一种:参考地址:http://dev.paperlesspost.com/setting-up-elasticsearch-synonyms/271.Add a synonyms file.2.Cr ...

  10. eclipse debug maven项目时出现缺少库的问题

    调试maven web项目时出现缺少库的情况导致项目无法启动  可是打包到tomcat发布却一切正常 后来在stackoverlow上找到了解决方案 项目右键属性->Deployment Ass ...