11

FooC# に次のコンストラクターがあるとします。

public Foo()
{
    // ...
}
protected Foo(bool connect)
    : this()
{
    // ...
}

パラメータが である場合にのみそのthis()部分を実行する方法を探しています。これらはこれを行う方法ですか?connecttrue

(好奇心旺盛な人向け: この背後にある理由は、Fooクラスが特定のものに接続するオブジェクトを作成するためです。それらが作成されると、常に同様に接続を試みる必要があります。現在、私はそのためのエミュレーター (または MOCK) を作成しています。クラスを拡張するFoo.そのためにコンストラクタを追加するprotected.これを使用する場合,実際の接続を作成しないオプションがあるはず.Fooクラスをできるだけ変更せずにこれを実装したい.)

4

3 に答える 3

8

this()いいえ、そのように条件付きで呼び出すことはできません。ただし、条件付きコードをコンストラクターに移動してprotected、コンストラクターからそのコンストラクターを呼び出すことができますpublic

public Foo() : this(true)
{

}

protected Foo(bool connect)
{
   if(connect) //...
}
于 2013-05-27T07:26:22.697 に答える
6

init()それを行う 1 つの方法は、関数を作成することです。

public Foo()
{
    // ...
    init();
}
protected Foo(bool connect)
{
    // ...
    if (connect) {
        init();
    }
}
于 2013-05-27T07:22:15.803 に答える
2

this() を条件付きで呼び出すことはできないため、代わりにメソッドを使用する必要があります

public Foo()
{
    ConnectCode();
}
protected Foo(bool connect)
    : this()
{
    if(connect)
        ConnectCode();
}

別の方法(それが良いかどうか、またはニーズに合っているかどうかはわかりません)は次のとおりです。

public Foo(bool connect=true)
{
    if(connect)
        ConnectCode();
}

このように Foo() を呼び出すコードを変更する必要はありませんが、保護されたアクセシビリティは失われます

于 2013-05-27T07:23:13.783 に答える