C# - 在派生类中调用基类构造函数

标签 c# inheritance constructor

假设我的 C# 程序中有以下基类和派生类:

class BaseClass
{
    public BaseClass() { }
    public BaseClass(int someVal) 
    { 
        // do something here 
    }
}

class DerivedClass : BaseClass
{
    public DerivedClass(string somethingNew) 
        : base()
    {
        // do something with the somethingNew varible
    }
    public DerivedClass(string somethingNew, int someVal)
        : base(someVal)
    {
        // do **THE SAME THING** with the somethingNew varible as in first constructor
    }
}

我的问题出现在最终的构造函数中 - 理想情况下,我希望能够按照以下方式做一些事情(尽管这不会编译):

    public DerivedClass(string somethingNew, int someVal)
        : base(someVal)
        : this(somethingNew)
    {

    }

换句话说,同时调用 base 和第一个构造函数。

有什么办法可以做到这一点,还是我只需要在这种情况下重写每个构造函数中的代码?

谢谢!!

最佳答案

并不是说这是正确的答案(我很想听听其他人会如何推荐我这样做),但我最终做的是创建一个私有(private) setter 方法,构造函数可以按照以下几行调用该方法:

class DerivedClass : BaseClass
{
    public DerivedClass(string somethingNew) 
        : base()
    {
        setVals(somethingNew);
    }
    public DerivedClass(string somethingNew, int someVal)
        : base(someVal)
    {
        setVals(somethingNew);
    }

    private setVals(string somethingNew) 
    {
        // do something with the somethingNew varible
    }
}

它解决了我不得不处理重复代码的问题,并且似乎是执行此操作的最干净的方法,但是,正如我所说,我很想看看其他人推荐什么/如果有更好的方法。

谢谢!!!

关于C# - 在派生类中调用基类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136699/

相关文章:

c++ - 使重写的虚函数成为非虚函数的目的

java - 在 Java 中使用带有继承的最终列表

c++ -::在C++中是什么意思?

c# - 为什么这段代码会锁定我的文件?

c# - 这个复杂的大东西等于这个吗?或这个?或这个?

c# - WCF:使用 URL 中的参数调用服务 &

c++ - 为什么我的复制列表初始化在我添加继承后停止工作?

c# - 在 Azure 中使用子域名单独的 Web 应用程序

c++ - 用当前类专门化继承的模板函数

使用 vector 的 C++ 类初始化