3

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

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

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

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

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

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

4

2 回答 2

4

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

于 2013-08-18T12:37:37.523 回答
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");.

于 2013-08-18T13:44:23.660 回答