zoukankan      html  css  js  c++  java
  • 反射创建对象

    一、理论实例

    1、动态载入DLL创建对象

                    var assembly = Assembly.LoadFrom("C:\\Binn\\Sample.dll");
                    var t = assembly.GetType("Sample.Report");
                    var report = (IReport)Activator.CreateInstance(t);

    2、判断对象是否继承于某接口

                Type t = typeof(ClsA).GetInterface("IB");
                Console.Write(t==null);

    二、应用场景

    多库支持:一个程序的数据保存在两个库中,希望根据参数动态的创建数据库对象;

    1、我们首先实现一个数据库接口

        public interface IDatabase
        {
            DataTable Execute(string sql);
        }

    2、创建继承该接口的数据库类

        public class ArchiveDB : IDatabase
        {
            public DataTable Execute(string sql)
            {
                DataTable dt;
                var db = new SQLServer2000 {ConnStr = Blackice.Config.WebConfig.ArchiveDB};
                db.Execute(sql, out dt);
                return dt;
            }
        }
        public class CurrentDB :IDatabase
        {
            public DataTable Execute(string sql)
            {
                DataTable dt;
                var db = new SQLServer2000 { ConnStr = Blackice.Config.WebConfig.CurrentDB };
                db.Execute(sql, out dt);
                return dt;
            }
        }

    3、获取数据的示例

            /// <summary>
            /// 获取数据
            /// </summary>
            /// <param name="dbname">指定的数据库名称</param>
            /// <param name="condition">查询条件</param>
            /// <returns></returns>
            public DataTable GetDataTable(string dbname,string tableName, string condition)
            {
                //根据指定的dbname反射创建数据访问接口
                var assembly = Assembly.LoadFrom(string.Format("{0}\\SqlHelper.dll", Blackice.Config.WebConfig.BinnPath));
                var typeName = string.Format("SqlHelper.{0}", dbname);
                var t = assembly.GetType(typeName);
                var db = (IDatabase)Activator.CreateInstance(t);
    
                //获取数据
                var dt = db.Execute(string.Format("select * from {0} where prtNum='{1}'",tableName, condition));
                return dt;
            }
  • 相关阅读:
    Linux环境下为普通用户添加sudo权限
    【转】在 Ubuntu 中使用 NTP 进行时间同步
    Shell脚本:批量添加用户,并设置随机字符为密码
    【转】Linux目录结构和常用命令
    系统启动流程
    linux系统利用libudev获取USB设备的VID和PID
    cJSON详解
    ajax读取文件内容
    window.location网页URL信息
    html实现网站全局按钮点击后置灰,不允许连续点击
  • 原文地址:https://www.cnblogs.com/blackice/p/2625708.html
Copyright © 2011-2022 走看看