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

本文关键字:实现 构造函数 何避免 派生 | 更新日期: 2023-09-27 18:28:00

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

例如,如果使用这个基类。

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

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

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

构造函数不是从基类继承的,因此无法在每个派生类中声明所有构造函数。但是,您可以使用例如T4模板来自动执行此重复性任务。

(根据请求从评论中提升。)

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

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");那么优雅。