4

是否可以在将参数传递给基本构造函数之前对其进行处理?

如:

A --> B

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

A的构造函数是这样的:

Protected A (MyObject myObject)

B的构造函数是这样的:

Public B (string objectName)

我希望它是这样的

Public B (String objectName) : base (MyObject myObject)
{
myObject = new MyObject (objectName);
}
4

2 回答 2

6

如果你想做一些不平凡的事情(它不适合你可以内联到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);
}
于 2013-02-22T15:31:39.023 回答
1

是的,但只能作为一个表达式:

public B(String objectName) : base(new MyObject(objectName)) {
}

请注意,由于 this 在构造类之前运行,因此它无法访问实例成员。

如果要运行多个表达式(例如,参数验证),可以调用静态方法。

于 2013-02-22T15:24:39.643 回答