知识大全 .NET简谈反射(动态调用)

Posted 反射

篇首语:大道之行,天下为公。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET简谈反射(动态调用)相关的知识,希望对你有一定的参考价值。

.NET简谈反射(动态调用)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我们继续C#基础知识的学习 这篇文章主要要讲的是我们C#程序员迈向高级C#程序员的关键性的一步

  有的朋友会说事实不是这样的 我不用反射就不能开发吗?当然可以 但是用与不用肯定是不一样的 任何复杂抽象的分层架构或者说是复杂的设计模式均是建立在这些基础之上的 比如我们要进行模块化 组件化开发 要严格的消除模块之间的耦合 要进行动态接口调用 这样的强大而灵活的系统开发 必须要用反射才行 任何技术都有它存在的价值和意义 只要我们把它用在合适的位置就能发挥出惊人的力量 能尽可能的减少我们编写的代码 更能是我们的代码便的清晰简洁

  下面我们就来学习C#中的反射的概念以及怎么使用它 用它能为我们提供什么样的好处 更重要的是能否将我们的技术台阶提升一个高度

   什么叫反射

  要想快速的学习一种技术 首先我们要明白这个技术是干什么的 我们需要有个大局观 需要有个总体的认识了解 才能发挥出每个人本能的理解能力 而不是拉着你来理解我的想法 只有这样我们才能学的更快 不知不觉我们就能形成自己一套独立的思考能力 [王清培版权所有 转载请给出署名]

  自然解释 射是一种自然现象 表现为受刺激物对刺激物的逆反应 这是反射的字面解释 我们看一下计算机编程中的反射

  编程解释 通过 System Reflection 命名空间中的类以及 System Type 您可以获取有关已加载的程序集和在其中定义的类型(如类 接口和值类型)的信息 您也可以使用反射在运行时创建类型实例 以及调用和访问这些实例 这是来自微软官方的MSDN定义

  通过这两者的比较 我想对于我们初学者来说 反射就是通过某种事物去反射另一种事物 我们小时候进行喜欢用镜子对着墙上照 会出现一个个小光圈 这就是很典型的反射例子 我们把它理解成计算机里的反射就是我用某中对象去反射我无法直接获取到的东西

  

  

  这幅图我想还是比较形象的 至少在我们脑子里已经有了这么一个概念 反射 反射就是通过某种中间设备获取到另一端的东西

  C#里面反射跟上面的概念是一样的 原理也是一样的 下面我们就用代码示例来进行讲解 我想通过本篇文章的学习 您一定可以很透彻的理解反射的概念

   C#反射示例

    

  在我的解决方案里面有两个项目 Reflection是控制台应用程序 TestDll是我们所要反射的项目 在这个项目里面我定义了一个Math类 也就是我们要反射的对象

  为了演示方便 我们需要设置一下TestDll项目的生成输出路径 也就是我们主程序的启动目录

  

   这样设置之后 我们项目的输出文件就会在我们应用程序的启动目录中 反射也就会方便一点 为了让初学者能少走弯路 我就费点事加上了

  按F 编译一下 会输出TestDll dll文件到Reflection的Debug目录中 我们切换到Reflection中的Main方法中开始进行反射操作

  view sourceprint?

  using System;

  using System Collections Generic;

  using System Text;

  using System Reflection;

  using System Diagnostics;

  namespace Reflection

  

  class Program

  

  static void Main(string[] args)

  

  Assembly dll = Assembly LoadFile(Environment CurrentDirectory + \\\\TestDll dll )

  Type math = dll GetType( TestDll Math true)

  MethodInfo method = math GetMethod( add )

  int count = (int)method Invoke(null new object[] )

  Console WriteLine( Invoke Method: + count ToString())

  Console ReadLine()

  

  

  

  我在Math类中定义了一个静态方法add 在这里我们就可以通过反射拿到Math对象进行动态调用了

  Assembly对象就好比我们日常生活中的镜子 我用这个镜子去照一下外部的DLL文件 那个文件里面的所有数据就可以反射给我了 我在通过托管对象进行一系列的获取调用了 具体的对象读者可以上网搜搜 大牛们讲解的比我详细 我只是做个入门介绍而已

cha138/Article/program/net/201311/13536

相关参考

知识大全 用反射调用任意.net库中的方法

注:ReturnMessage是我自写的一个类作用请查看我的其他文章我也把这个类一并附在后面通过NameSpaceAndClassName和MethodName实际上就可以精确定位一个方法了如调用ab

知识大全 .NET的动态编译与WS服务调用详解

.NET的动态编译与WS服务调用详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了N

知识大全 java反射机制

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

知识大全 .NET简谈设计模式之(适配器模式)

.NET简谈设计模式之(适配器模式)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天我们要学

知识大全 对.NET Framework 反射的反思[3]

对.NETFramework反射的反思[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  动态

知识大全 静态和动态方法调用的区别

   动态方法在使用时需要先创建实例才能调用实例方法而静态方法则不需要直接使用即可      //定义静态方法

知识大全 c#动态调用Web Service

c#动态调用WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 VB动态调用外部函数的方法

VB动态调用外部函数的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  VB可以用Declar

知识大全 C#实现动态调用Windows DLL

C#实现动态调用WindowsDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  部分代码来自

知识大全 动态IP的Web service调用

动态IP的Webservice调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  系统架构需要使