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

本文关键字:前处理 参数 构造函数 调用 | 更新日期: 2023-09-27 18:00:39

在将参数传递到基构造函数之前,是否可以处理参数?

如:

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);
}

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

如果你想做一些非平凡的事情(它不自然地适合你可以内联到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);
}

是,但仅作为一个表达式:

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

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

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