简单反射机制
来源:互联网 发布:酷家乐设计软件下载 编辑:程序博客网 时间:2024/04/30 00:54
1.什么是反射?
MSND:反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
反射的名称空间:System.Reflection,具体参考http://msdn.microsoft.com/zh-cn/library/system.reflection.aspx
小编理解:在做程序的时候,一般采取类的实例化,来操纵对象的行为。就是我们必须先创建对象,然后才可以利用对象的行为,而反射是在运行状态中,来知道类的所有的属性和方法,这种动态获取的信息以及动态调用对象的方法的功能称为反射。
2.引入DLL操作类
在程序中经常的引入DLL或者命名空间,就是通过引入编译好的DLL来操作类,看一个实例。
自己写的DLL
<span style="font-family:SimSun;font-size:18px;">namespace Test{ public class Test { public int Add(int a,int b) { return a + b; } }}</span>
当把上述类编译后,我们可以在项目的bin\debug中看到编译好的DLL,在另外的项目中添加引用
<span style="font-family:SimSun;font-size:18px;">namespace aa{ class Program { static void Main(string[] args) { Test.Test a = new Test.Test(); Console.WriteLine(a.Add(3, 4)); } }}</span>
当引入编译好的DLL后就可以,操作DLL中封装的类的行为,就是还需要实例化类为对象,才可以操纵类的行为。
2.利用反射动态创建类的实例
条件:我们创建两个类库来演示操作。
Add类:我们需要通过反射测试的类
Program类:控制台应用程序。
Add类
<span style="font-family:SimSun;font-size:18px;">namespace Add{ class Add { /// <summary> /// 加法操作 /// </summary> /// <param name="a">参数一</param> /// <param name="b">参数二</param> /// <returns></returns> public int jia(int a, int b) { return a + b; } }}</span>
Program类
<span style="font-family:SimSun;font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Test;using System.Reflection;//反射命名空间namespace aa{ class Program { static void Main(string[] args) { //反射机制动态创建类的实例 Add.Add b=Assembly.Load("Add").CreateInstance("Add.Add") as Add.Add; Console.WriteLine(b.jia(4, 9)); } }}</span>
实现起来特别的简单,主要是利用了Assembly类的一些方法,更多的方法,请参照MSDN.
3.配置文件解决创建类库操作
最近做过的一个Demo实例,通过反射机制,动态的创建程序集中的类库
前置条件:DALMYSQL.dll:程序集;
DALMSSQL.DBSessionFactory:类库中的一个工厂类
配置文件中加载项
<span style="font-family:SimSun;font-size:18px;"> <appSettings> <add key="DBSessionFactory" value="DALMSSQL.DBSessionFactory"/> <!--添加对DLL的引用,引用的是路径> <add key="DBSessionFactoryDLL" value="C:\Users\ZHOU\Desktop\Tree\MVCOA\MVCOA\MVCOA\bin\DALMYSQL.dll"/> </appSettings></span>
反射类库对象
Program测试类
<span style="font-family:SimSun;font-size:18px;"> class Program { static void Main(string[] args) { //1.读取配置文件 string strFactoryDLL = System.Configuration.ConfigurationManager.AppSettings["DBSessionFatoryDLL"]; string strFactoryType = System.Configuration.ConfigurationManager.AppSettings["DBSessionFatory"]; //2.加载程序集 Assembly dalDLL = Assembly.LoadFrom(strFactoryDLL); //获得程序集中要实例化的类的类型 Type typeDBSessionFactory = dalDLL.GetType(strFactoryType); //反射对象,需要进行强制转换 IDAL.IDBSessionFactory sessionFactory = Activator.CreateInstance(typeDBSessionFactory) as IDAL.IDBSessionFactory; } }</span>
分析:利用的特性还是一样,主要是Assembly程序集来加载反射。
-------------------------------欢迎点评---------------------------------------------------------------
- 简单的反射机制
- 反射机制简单实例
- 反射机制简单解析
- 简单反射机制
- java反射机制简单例子
- java反射机制简单实例
- 简单的Java反射机制
- java反射机制简单例子
- Java 反射机制简单总结
- 简单的Java反射机制
- Java反射机制简单示例
- 反射机制的简单使用
- 简单认识java反射机制
- 简单理解java反射机制
- JAVA 反射机制简单运用
- java反射机制简单认知
- java反射机制简单应用
- 简单理解java反射机制
- Android code in Eclipse
- 特种浓缩分离:碟管式反渗透膜设备应用
- 在对象之间搬移特性---Hide Delegate(隐藏委托关系)
- 使用 Git 生成标准 Patch
- gdb常用操作
- 简单反射机制
- 保健品市场进入爆发阶段,通过营销和渠道寻求创新是大势所趋
- jQuery验证控件jquery.validate.js使用说明+中文API
- javascript 总结笔记
- linux 下 ffmpeg 没法调试进去的问题
- 【JAVA001】No enclosing instance of type XXX is accessible.
- php trim()不能去掉的空格
- 萃取lambda表达式
- 拍摄人像的取景选择(近景.中景.远景)