[转载]使用反射技术动态创建类对象(实例代码)

经过三番五次天之钻研,终于能够动态加载数据访问层了。虽然网上有广大介绍反射的文章,但犹是于理论及的话的,没有一个特别详细的例子,所以一直尚未会写来实际代码。这里将好之平等段代码写出来,希望会帮忙像我同一的新家快速达标亲手,先采用,再深入,免得着急。

率先说一下基本信息,本例以对数据库被的一个表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.Sort和KoalaStudio.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();”既而一直生成一个数量访问类的实例。在这边,我们无需理会后台是呀数据库,只需要直接下类工厂给我们提供的多少访问类实例即可。

相关文章