2

Googleで検索しましたが、何も見つかりませんでした。そこで、中間コンストラクターで動作するものを実装しました。

ただし、同時に複数のコンストラクターをチェーンできるかどうか疑問に思っています(base + this)。

これは私の現在の(簡略化された)コードです:

public BlaNode(Node Previous, Node Next) : base(Previous, Previous)
{
    this.Blas = new HashSet<BlaDiBla>();
}
public BlaNode()
    : this(null, null)
{

}
public BlaNode(Node Previous, Node Next, string Bla)
    : this(Previous, Previous)
{

}
4

3 に答える 3

1

同時に複数のコンストラクターをチェーンできるかどうか(base + this)

いいえ。横方向(this)にチェーンして複数回、または「上」(base)に1回だけチェーンすることができます。

この表記は、コンストラクター本体が実行される順序と密接に関連していることに注意してください。

あなたBlaNode(Node, Node)は、基本コンストラクターを「選択」するものです。別のベースコンストラクターを選択することBlaNode()が許可されたとします。これは、どのctorが使用され、どのパラメーターで使用されるかについて混乱を招くだけです。

ですから、私が見ることができる利益はなく、間違いなく欠点があります。

于 2012-08-02T13:12:21.440 に答える
1

いいえ、C#コンストラクタイニシャライザで一度に呼び出すことができるコンストラクタは1つだけです。ドキュメントでは、呼び出す他のコンストラクターも1つだけ参照しています。

すべてのインスタンスコンストラクター(...)には、別のインスタンスコンストラクター(...)の呼び出しが含まれます。暗黙的に呼び出すコンストラクターは、コンストラクター初期化子によって決定されます。

private他のコードで呼び出さない場合は、中間コンストラクターを作成できます。

于 2012-08-02T13:13:41.087 に答える
1

私の知る限り、これは不可能です。これには静的ファクトリメソッドを使用できます。http://en.wikipedia.org/wiki/Factory_method_pattern

private BlaNode(Node Previous, Node Next) : base(Previous, Previous)
{
    //whatever you do
}

public static BlaNode BlaNodeFactory()
{
    return new BlaNode(null, null);
}

public static BlaNode BlaNodeFactory(Node Previous, Node Next, string Bla)
{
    return new BlaNode(Previous, Previous);
}
于 2012-08-02T13:15:03.107 に答える