我有一个基类,它有很多派生类,基类有几个构造函数。在我的所有派生类中,我必须实现空构造函数以将参数转发给基础构造函数。有可能以某种方式告诉C#使用派生的构造函数吗?
例如,如果使用此基类。
class BaseTool
{
public BaseTool(string Arg1, string Arg2)
{
// do stuff.
}
public BaseTool(string Arg1)
{
// do stuff.
}
public BaseTool(int Arg1)
{
// do stuff.
}
}
我必须使用这些参数实现所有上述构造函数,然后调用: base(...)
将它们转发到派生类。这导致很多类具有空构造函数。好像很多浪费的代码。
答案 0 :(得分:4)
构造函数不是从基类继承的,因此无法在每个派生类中声明所有构造函数。但是,您可以使用T4 Templates。
自动执行此重复性任务答案 1 :(得分: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");
更不优雅。