在调用基础构造函数之前处理参数

The*_*per 4 c# inheritance

是否可以在将参数传递给基础构造函数之前处理它们?

如:

A --> B
Run Code Online (Sandbox Code Playgroud)

其中A是抽象类,B是子类.

A的构造函数是这样的:

Protected A (MyObject myObject)
Run Code Online (Sandbox Code Playgroud)

B的构造函数是这样的:

Public B (string objectName)
Run Code Online (Sandbox Code Playgroud)

我希望它是这样的

Public B (String objectName) : base (MyObject myObject)
{
myObject = new MyObject (objectName);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

如果你想做一些非平凡的事情(那些自然不适合你可以内联到base调用中的单个表达式),那么唯一的方法就是在一个static方法中,例如:

public B (string objectName) : base (SomethingComplex(objectName))
{
    //...
}
static MyObject SomethingComplex(string objectName)
{
    // this can now be arbitrarily complex
    if(string.IsNullOrWhiteSpace(objectName))
        throw new ArgumentException("objectName")
    // etc
    return new MyObject(objectName);
}
Run Code Online (Sandbox Code Playgroud)