如何在调用自己的构造函数之后调用基类的构造函数?
问题是,基类的构造函数调用了一个抽象方法(在子类中重写),它需要访问变量x
,在子类的构造函数中初始化?
简短示例代码:
abstract class BaseClass
{
protected string my_string;
protected abstract void DoStuff();
public BaseClass()
{
this.DoStuff();
}
}
class SubClass : BaseClass
{
private TextBox tb;
public SubClass()
: base()
{
this.my_string = "Short sentence.";
}
protected override void DoStuff()
{
// This gets called from base class' constructor
// before sub class' constructor inits my_string
tb.Text = this.my_string;
}
}
编辑:根据答案,这显然是不可能的。是否有一种自动方法可以在 SubClass
的每个对象创建后调用 this.DoStuff();
?当然,我可以在子类的构造函数中的所有其他行之后添加 this.DoStuff();
,但是有大约 100 个这样的类,感觉很愚蠢。任何其他解决方案,还是我应该使用手动解决方案?
最佳答案
你不能。
此外,您通常不应在构造函数中调用 virtual
方法。看这个answer .
根据您的实际代码而不是您编写的简单示例,您可以将值作为基本构造函数和 DoStuff
方法的参数传递。例如:
abstract class BaseClass
{
private string my_string;
protected abstract void DoStuff(string myString);
public BaseClass(string myString)
{
this.my_string = myString;
this.DoStuff(this.my_string);
}
}
class SubClass : BaseClass
{
private TextBox tb;
public SubClass()
: base("Short sentence.")
{
}
protected override void DoStuff(string myString)
{
tb.Text = myString;
}
}
如果您的实际代码无法实现,则编写多个 DoStuff()
即可。还要记住密封您的 SubClass
类,这样其他人就无法通过再次修改 DoStuff
方法来引入错误。
关于C# 在自己的构造函数之后调用基类的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14562779/