C#:从子构造函数体调用父(基)构造函数

Dan*_*dez 3 c# inheritance constructor

我有一个抽象类Parent和一个派生类Child。我知道我可以通过以下方式Parent在 的构造函数内调用 的构造函数:Child

abstract class Parent 
{
    protected int i;
    protected Parent(int i) 
    {
        this.i = i;
    }
}

class Child : Parent 
{
    public Child(int i) : base(i) 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不想Parent立即将一些参数传递给构造函数。我想执行一些计算,然后Parent使用此类计算的结果作为输入参数来调用的构造函数。代码“看起来”是这样的:

public class Child : Parent 
{
    public Child(int i) 
    {
        int calculation = i * 2; // Complicated operation
        base(calculation); // This line will break
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个片段不是有效的 C# 代码。有没有办法推迟对Parent的构造函数的调用以模仿第二个代码片段中表达的情绪?

S. *_*one 6

假设您可以直接访问属性,这将执行相同的技巧

abstract class Parent 
{
    protected int i;
    protected Parent() 
    {
       //default constructor
    }
}

class Child : Parent 
{
    public Child(int i)
    {

        Int calculation = i * 2
        base.i = calculation
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果由于对属性的访问受到限制而无法做到这一点,我个人的偏好是将计算逻辑外包到单独的函数中并调用基类,如下所示:

abstract class Parent 
{
    protected int i;
    protected Parent(int i) 
    {
        this.i = i;
    }
}

class Child : Parent 
{
    public Child(int i) : base(Child.dosomework(i)) 
    {
    }

    public static int dosomework(int i){
        int calculation = i * 2
        return calculation
    }
}
Run Code Online (Sandbox Code Playgroud)