[英]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.