如何避免在派生类中实现空构造函数
本文关键字:实现 构造函数 何避免 派生 | 更新日期: 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");
那么优雅。