• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
悟空的天空
天马行空
博客园    首页    新随笔    联系   管理    订阅  订阅
反射(原理和实践)

原理: 

搜了搜园子,已经有棵这方面的好白菜了!链接如下
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);创建了一个对象。

 

 

 

 

posted on 2009-07-06 11:30  悟空  阅读(252)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3