• 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  }

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

  • 相关阅读:
    我要录视频XML(一)
    JavaScript入门基础 (一)
    JQuery 入门24条
    3.The IoC container
    关于jquery.fn
    apche禁止列表显示文件夹中文件,并且显示特定界面
    Struts 2 + Spring 2 + JPA + AJAX
    3.The IoC container(2)
    4.9 Annotationbased container configuration
    3.5 Bean scopes
  • 原文地址:https://www.cnblogs.com/cqgreen/p/3390114.html
Copyright © 2020-2023  润新知