C# 在自己的构造函数之后调用基类的构造函数?

标签 c# class inheritance constructor superclass

如何在调用自己的构造函数之后调用基类的构造函数?

问题是,基类的构造函数调用了一个抽象方法(在子类中重写),它需要访问变量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/

相关文章:

c# - 如何在远程服务器上使用 BitmapImage 设置 UriSource?

c# - Visual Studio 2015 - EnvDTE 读取错误列表

php - ZF2 MVC 全局函数

c# - 从模板类转换

c# - 与此 Ninject 代码等效的 Autofac 是什么?

c# - 尝试使用 LINQ 表达式创建 "Fluent"类型类

python - 类中的所有变量都必须在初始化时创建吗

python - 所有类方法中的类变量访问

lisp - 等价类 LISP

ios - 当类不提供实现时,为什么可以调用 init 的无参数版本?