反射(原理和实践)

原理: 

搜了搜园子,已经有棵这方面的好白菜了!链接如下
http://www.cnblogs.com/whxleem/category/4641.html

 

实践:

通过原理我们知道反射就是如果仅知道一个类的名称就能通过程序运行得到该类的地址,续而创建该实例。

这里简单叙述一下我们框架中反射的运用。注意一下:我们的框架用的是三层框架

 

代码:

 

ObjectBiz objectBiz = _objectBizDal.Get(OID);//OID是数据库中biz层中的ID,它记录了BIZ层的程序集等信息

objectBiz 执行后结果
{SW.FrameWork.EXTJS.Model.ObjectBiz}
    _assemblyName: "DemoExtBiz"
    _className: "SW.Framework.ExtJsDemo.Biz.CustomerBiz"
    _OID: "50"
    AssemblyName: "DemoExtBiz"
    ClassName: "SW.Framework.ExtJsDemo.Biz.CustomerBiz"
    OID: "50"V

 

public object CreateBiz(ObjectBiz objectBiz)
        {
            try
            {
                System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(objectBiz.AssemblyName);
                if (assembly == null) return null;
              
                return assembly.CreateInstance(objectBiz.ClassName);
            }
            catch (Exception ex)
            {
                //_log.Debug("创建ObjectBiz实例失败", ex);
                throw;
            }

        }

assembly 执行后结果

FullName = "DemoExtBiz, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

CodeBase = "E:/vss/开发框架/[3]源代码(Implementation)/Framework[refactor]/Demo/EXTJSDemo/DemoWeb/bin/DemoExtBiz.DLL"

 

程序阅读:

  • 根据程序集名称得到一个类型信息,具体得到了需要用的类的地址。(看assembly执行后结果)。
  • assembly.CreateInstance(objectBiz.ClassName);创建了一个对象。

 

public object CreateBiz(ObjectBiz objectBiz)
        {
            try
            {
                System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(objectBiz.AssemblyName);
                if (assembly == null) return null;
              
                return assembly.CreateInstance(objectBiz.ClassName);
            }
            catch (Exception ex)
            {
                //_log.Debug("创建ObjectBiz实例失败", ex);
                throw;
            }

        }

assembly 执行后结果

FullName = "DemoExtBiz, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

CodeBase = "E:/vss/开发框架/[3]源代码(Implementation)/Framework[refactor]/Demo/EXTJSDemo/DemoWeb/bin/DemoExtBiz.DLL"

 

程序阅读:

  • 根据程序集名称得到一个类型信息,具体得到了需要用的类的地址。(看assembly执行后结果)。
  • assembly.CreateInstance(objectBiz.ClassName);创建了一个对象。

 

 

 

 

转载于:https://www.cnblogs.com/cocole/archive/2009/07/06/1517557.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值