1. 背景
应用程序结果分为应用程序域-程序集-模块-类型-成员几个层次,公共语言运行时(CLR)加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。
程序集包含模块,而模块包含类型,类型又包含成员,反射则提供了封装程序集、模块和类型的对象。我们可以使用反射动态地创建类型的实例,将类型绑定到现有对象或从现有对象中获取类型,然后调用类型的方法或访问其字段和属性。
2. 反射是什么?
反射(Reflection)是.NET中的重要机制,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件、以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。
3. 实例
首先我们先介绍一下例子中的抽象类和子类。
如果我们不使用反射来对子类进行访问,于是我们的代码如下:
得到的结果是:
试想一下,如果我们再加一个人物类别,比如新加一个类(如:校长),这个时候上面的switch case的代码会相应的发生增加一个case, 这样就不利于维护,如果能够在增加类的时候不对原来的主要程序不做更改,这个时候反射就是一种很好的解决方案。
下面我们使用反射来实现对子类的调用,反射代码如下:
当然上面给property设置值的部分,我们可以选择设置和不设置,在设置之后,其运行结果为:
标签:反射,程序,应用程序,模块,类型,构造函数 来源: https://www.cnblogs.com/youwell/p/16332527.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。