C#泛型使用小记_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#泛型使用小记

C#泛型使用小记

 2013/10/27 2:45:26  青草_草帽  博客园  我要评论(0)
  • 摘要:最近C#的泛型使用频次略多,特在此记下一个印象深刻的。情景如下,基类BaseClass有一系列的子类SubClass1,SubClass2,SubClass3...且其构造函数的参数较多。使用工厂模式实例化子类的代码大致如下:1BaseClassCreateInstance(TYPEtype,objectparam1,objectparam2,objectparam3,objectparam4)2{3BaseClassinstance=null;4switch(type)5
  • 标签:C# 使用 泛型

最近C#的泛型使用频次略多,特在此记下一个印象深刻的。

情景如下,

基类BaseClass 有一系列的子类 SubClass1, SubClass2, SubClass3... 且其构造函数的参数较多。使用工厂模式实例化子类的代码大致如下:

 1 BaseClass CreateInstance(TYPE type, object param1, object param2, object param3, object param4)
 2 {
 3 BaseClass instance = null;
 4   switch(type)
 5     {
 6         case type1: instance = new SubClass1(param1, param2, param3, param4);break;
 7         case type2: instance = new SubClass2(param1, param2, param3, param4);break;
 8         case type3: instance = new SubClass3(param1, param2, param3, param4);break;
 9     ...
10     }
11 return instance;
12 }

上面代码,个人觉得不够简洁,特别是每拷贝粘贴一行都有种被恶心到的感觉...

所以使泛型重写上面的实现:

在BaseClass中加入虚函数Init(object param1, object param2, object param3, object param4); 并将其构造函数改为无参,其各子类都如此改造。这样上面的实例化子类的代码则变为

 1  BaseClass CreateInstance(TYPE type, object param1, object param2, object param3, object param4)
 2  {
 3     BaseClass instance = null;
 4      switch(type)
 5       {
 6           case type1: instance = CreateInstance<SubClass1>();break;
 7           case type2: instance = CreateInstance<SubClass2>();break;
 8           case type3: instance = CreateInstance<SubClass3>();break;
 9       ...
10       }
11      instance.Init(param1, param2, param3, param4);
12     return instance;
13  }
14  
15  T CreateInstance<T>() where T : BaseClass, new()
16  {
17      T t = new T();
18      return t;
19  }

这样总算让我舒服了些... 以后即使要改变初始化时的参数个数改动也相对少了很多... 

 

 

发表评论
用户名: 匿名