如何避免在派生类中实现空构造函数?

时间:2013-08-18 12:33:42

标签: c# constructor

我有一个基类,它有很多派生类,基类有几个构造函数。在我的所有派生类中,我必须实现空构造函数以将参数转发给基础构造函数。有可能以某种方式告诉C#使用派生的构造函数吗?

例如,如果使用此基类。

 class BaseTool
 {
      public BaseTool(string Arg1, string Arg2)
      {
          // do stuff.
      }

      public BaseTool(string Arg1)
      {
          // do stuff.
      }

      public BaseTool(int Arg1)
      {
          // do stuff.
      }
  }

我必须使用这些参数实现所有上述构造函数,然后调用: base(...)将它们转发到派生类。这导致很多类具有空构造函数。好像很多浪费的代码。

2 个答案:

答案 0 :(得分:4)

构造函数不是从基类继承的,因此无法在每个派生类中声明所有构造函数。但是,您可以使用T4 Templates

自动执行此重复性任务

答案 1 :(得分:2)

(根据要求通过评论推广。)

我唯一能想到的是制作静态方法而不是实例构造函数。例如:

class BaseTool
{
  public static T Create<T>(string Arg1, string Arg2) where T : BaseTool, new()
  {
    var instance = new T();
    // do stuff, to instance (which is a BaseTool)
    return instance;
  }

  public static T Create<T>(string Arg1) where T : BaseTool, new()
  {
    var instance = new T();
    // do stuff, to instance (which is a BaseTool)
    return instance;
  }

  public static T Create<T>(int Arg1) where T : BaseTool, new()
  {
    var instance = new T();
    // do stuff, to instance (which is a BaseTool)
    return instance;
  }
}

这可以称为:

var newDT = BaseTool.Create<DerivedTool>("foo", "bar");

或者,从某些BaseTool内部(因为方法 继承,与构造函数不同),只是:

var newDT = Create<DerivedTool>("foo", "bar");

我知道它比var newDT = new DerivedTool("foo", "bar");更不优雅。