Activator.CreateInstance

本文介绍了一个使用C#实现的泛型工厂模式案例,通过一个私有字典存储类型映射,提供了两种方法来创建指定类型的实例,一种不带参数,另一种接受参数数组。此外,还展示了如何根据不同数据库项类型创建相应的子类实例。
   private Dictionary<Type, Type> m_ObjectType = new Dictionary<Type, Type>();


   public T CreateNewInstance<T>() where T : class
        {
            if (m_ObjectType.ContainsKey(typeof(T)))
            {
                Type insType = m_ObjectType[typeof(T)];
                return Activator.CreateInstance(insType) as T;
            }
            else
            {
                throw new Exception("未知的类型"+ typeof(T).ToString());
            }
        }

        public T CreateNewInstance<T>(params object[] args) where T:class
        {
            if (m_ObjectType.ContainsKey(typeof(T)))
            {
                Type insType = m_ObjectType[typeof(T)];
                return Activator.CreateInstance(insType, args) as T;
            }
            else
            {
                throw new Exception("未知的类型" + typeof(T).ToString());
            }
        }

   public IDatabaseItem CreateNewDatabaseItem(string name, string description, 
    DatabaseItemType tt, IDatabaseItem parent)
        {
            switch (tt)
            {
                case DatabaseItemType.Database:
                    return CreateNewInstance<DatabaseItem>(name, parent);
                case DatabaseItemType.Field:
                    return CreateNewInstance<DatabaseFieldItem>(name, description, 
                      parent);
                case DatabaseItemType.Server:
                    return CreateNewInstance<DatabaseServerItem>(name);
                case DatabaseItemType.Table:
                    return CreateNewInstance<DatabaseTableItem>(name, parent);
                default:
                    throw new Exception("未知的数据库类型");
            }
        }

  

  •  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值