我有以下层次结构:
class Base
{
public Base(string sMessage)
{
//Do stuff
}
}
class Derived : Base
{
public Derived(string someParams)
{
string sMessage = "Blah " + someParams;
//Here I want to call the base constructor
//base(sMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
Ore*_*ost 19
您必须在派生类构造函数的主体之前调用基类构造函数.
class Derived : Base
{
public Derived(string someParams)
: base("Blah " + someParams)
{
}
}
Run Code Online (Sandbox Code Playgroud)
你不能.您可以在之前调用它:
public Derived() : base()
Run Code Online (Sandbox Code Playgroud)
或者你必须使用一个钩子
class Base
{
protected void init() { }
public Base(string sMessage)
{
init();
}
}
class Derived : Base
{
public Derived(string someParams)
{
string sMessage = "Blah " + someParams;
init();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我最初错过了OregonGhost关于使用静态方法修改参数的评论,这对我来说是最有用的,所以我想我会为阅读这个帖子的其他人添加一个代码示例:
class Base
{
public Base( string sMessage )
{
// Do stuff
}
}
class Derived : Base
{
public Derived( string sMessage ) : base( AdjustParams( sMessage ) )
{
}
static string AdjustParams( string sMessage )
{
return "Blah " + sMessage;
}
}
Run Code Online (Sandbox Code Playgroud)