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

これはクラスが構築される前に実行されるため、インスタンスメンバーにアクセスできないことに注意してください。

複数の式を実行する場合(パラメーターの検証など)、静的メソッドを呼び出すことができます。

于 2013-02-22T15:24:39.643 に答える