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  }

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

 

 

你可能感兴趣的:(C#)