在发送到Base构造函数之前修改参数值

Ian*_*n P 30 c# inheritance constructor

标题可能有点含糊不清,但我想不出更好的方法来说明这一点.

我意识到在调用基础构造函数之前我不能调用派生构造函数,但是我可以在将它们传递给基础之前以某种方式修改/创建参数值吗?

例如,

public enum InputType
{
    Number = 1,
    String = 2,
    Date = 3
}

public class BaseClass
{
    public BaseClass(InputType t)
    {
        // Logic
    }
}

public class DerivedClass : BaseClass
{
    public DerivedClass(int i)
        : base(value)
    // Can I do something to infer what value should be here?
    {
        // Logic
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个派生类,可以推断出基本构造函数所需的值(在这个例子中,InputType.Number对于一个有效int),有没有办法修改和/或创建在派生之前传递给基础构造函数的值构造函数执行?

Don*_*kby 50

我希望你可以在基类构造函数的参数列表中调用静态方法.

public class DerivedClass : BaseClass
{
    public DerivedClass(int i)
        : base(ChooseInputType(i))
    {
    }

    private static InputType ChooseInputType(int i)
    {
        // Logic
        return InputType.Number;
    }
}
Run Code Online (Sandbox Code Playgroud)


GBe*_*gen 5

您可以使用静态方法计算要传递给基础构造函数的值.

public class DerivedClass :
    BaseClass
{
    public
    DerivedClass(int i) :
        base(ComputedValue(i))
    {
    }

    public static InputType
    ComputedValue(int i)
    {
        return InputType.Number; // or any other computation you want here
    }
}
Run Code Online (Sandbox Code Playgroud)