簡體   English   中英

如何避免在派生類中實現空構造函數?

[英]How to avoid implementing empty constructors in derived classes?

我有一個基類,它有大量的派生類,基類有幾個構造函數。 在我的所有派生類中,我必須實現空構造函數以將參數轉發給基礎構造函數。 有可能以某種方式告訴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");更不優雅var newDT = new DerivedTool("foo", "bar");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM