惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
有赞技术团队
有赞技术团队
博客园 - 司徒正美
量子位
N
News and Events Feed by Topic
T
Threatpost
Last Week in AI
Last Week in AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security
酷 壳 – CoolShell
酷 壳 – CoolShell
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
I
Intezer
人人都是产品经理
人人都是产品经理
T
Tenable Blog
IT之家
IT之家
雷峰网
雷峰网
腾讯CDC
博客园 - 聂微东
V
Visual Studio Blog
S
SegmentFault 最新的问题
Scott Helme
Scott Helme
Spread Privacy
Spread Privacy
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
N
Netflix TechBlog - Medium
J
Java Code Geeks
宝玉的分享
宝玉的分享
F
Full Disclosure
WordPress大学
WordPress大学
A
Arctic Wolf
小众软件
小众软件
AWS News Blog
AWS News Blog
Attack and Defense Labs
Attack and Defense Labs
NISL@THU
NISL@THU
AI
AI
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
N
News | PayPal Newsroom
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org

博客园 - 右手边

C#动态执行代码 这是一个广为流传的关于项目管理的通俗讲解 [史上最狂妄的演讲]你不服都不行<英汉版>~~ - 右手边 - 博客园 关于页面动态添加控件 利用反射动态创建对象 利用反射来动态创建实例和调用方法(上) 基于ASP.NET的Web动态控件创建 家中请客(最佳ERP教材)- - 2007年4月25日 经典的几句英文 网上英语免费杂志在钱订阅网址 将(Oracle)数据库表导出到Excel,并生成文件(C#实现) B/S结构与C/S结构 AJAX三步走 Ajax简单例子 Oracle 启动与关闭例程 AJAX的原理 VB资料库-无限下载 ASP.Net中程序构架与程序代码的分离 Oracle 系统结构
使用反射技术动态创建类对象(实例代码)
右手边 · 2007-05-25 · via 博客园 - 右手边

经过数天的研究,终于能动态加载数据访问层了。虽然网上有不少介绍反射的文章,但都是从理论上来说的,没有一个特别详细的例子,所以一直没能写出实际代码。这里把自己的一段代码写出来,希望能够帮助像我一样的初学者快速上手,先应用,再深入,免得着急。

首先说一下基本信息,本例以对数据库中的一个表Sort(类别)的访问为基础。表结构就不说了,而且我也不想涉及到对数据库的具体操作,主要是看一下思路。关于反射的一些概念和基本常识,请参考相关文章,网上有写得非常好的,作者就不班门弄斧了。

首先创建几个存放类文件的目录:    

    IDAL,表示数据访问层接口;

    SQLServerDAL,表示数据访问层,用于操作SQL Server数据库;

    AccessDAL,表示数据访问层,用于操作Access数据库;

    DALFactory,表示数据访问层类的类工厂;

    BLL,表示业务逻辑层;

然后在各文件夹下建立类,下面是对应的类的代码,命名空间为 “KoalaStudio.BookshopPortal”,这里只保留了最必要的代码。

1)首先建立一个数据访问层接口KoalaStudio.BookshopPortal.IDAL.ISort

    using System;

    using System.Data; 

    namespace KoalaStudio.BookshopPortal.IDAL 

    

        interface ISort 

       

            DataSet GetList();  

        }

    }

说明:首先定义了一个数据访问层接口,所有的数据访问层类都必须派生于该接口,这样就能对业务逻辑层提供统一的调用方法。

2)然后建立数据访问层类KoalaStudio.BookshopPortal.SQLServerDAL.SortKoalaStudio.BookshopPortal.AccessDAL.Sort

    using System;

    using System.Data;

    using KoalaStudio.BookshopPortal.IDAL; 

    namespace KoalaStudio.BookshopPortal.SQLServerDAL 

     {

        class Sort : ISort        

            // 得到类别信息列表 

             public DataSet GetList()

            

                //此处为SQL数据库访问代码,得到的结果作为一个数据集返回

            }

        }

    

    namespace KoalaStudio.BookshopPortal.AccessDAL

    { 

        class Sort : ISort 

       

             // 得到类别信息列表 

            public DataSet GetList() 

           

               //此处为Access数据库访问代码,得到的结果作为一个数据集返回             }

        }

    }

说明:两个类都派生于ISort,实现的功能相同,不同点就是所操作的数据库不同

3)下面就是类工厂的实现

    using System;

    using System.Reflection;

    using KoalaStudio.BookshopPortal.IDAL; 

    namespace KoalaStudio.BookshopPortal.DALFactory

     {

        class Sort 

       {

            public static KoalaStudio.BookshopPortal.IDAL.ISort Create() 

           

               //后台使用SQL Server数据库

                 string className = "KoalaStudio.BookshopPortal.SQLServerDAL.Sort";

                 //如果后台使用Access数据库,则写成:

               //string className = "KoalaStudio.BookshopPortal.AccessDAL.Sort";

                 Type t = Type.GetType(className); 

                 return (ISort) Activator.CreateInstance(t);       

           

        }

    }

说明:首先得到一个字符串,这个字符串就是需要使用的数据访问层类的名称。再实际环境中,需要把这个字符串存储于配置文件中,这样在程序运行时,只要修改了字符串也就修改了程序操作数据库的代码,而不用重新编译。

Type t = Type.GetType(className);”根据字符串提供的类名称返回这个类的类型信息,然后用“Activator.CreateInstance(t)”即可将此类实例化。最后用“(ISort)”将得到的实例转换为“KoalaStudio.BookshopPortal.IDAL.ISort”类型。

4)最后是KoalaStudio.BookshopPortal.BLL.Sor

    using System;

    using System.Data;

    using KoalaStudio.BookshopPortal.IDAL; 

    namespace KoalaStudio.BookshopPortal.BLL

    

        public class Sort 

       

             /// 返回类别名称列表

             public static DataSet GetNameList()

            {

                 ISort sortDal = DALFactory.Sort.Create();

                 return sortDal.GetMainList();

            }

        }

    }

说明:用“ISort sortDal = DALFactory.Sort.Create();既可直接生成一个数据访问类的实例。在这里,我们不必理会后台是什么数据库,只需要直接使用类工厂给我们提供的数据访问类实例即可。