1

コンストラクターを連鎖させるシステムを、不可能かもしれないと思う方法で設計しようとしていますが、最初に確認したいと思います。

次のように5つのオーバーロードされたコンストラクターがあります。

public SqlCeDB(string filename)
public SqlCeDb(string filename, Dictionary<string, string> options)
public SqlCeDB(string filename, string password)
public SqlCeDB(string filename, string password, Dictionary<string, string> options)
public SqlCeDB(Dictionary<string, string> options)

すべてのロジックを最後のコンストラクターに組み込み、他のコンストラクターに制御を渡してもらいたいです。現在、次のように最初のコンストラクターが機能しています。

public SqlCeDB(string filename)
    : this(new Dictionary<string, string> { { "DataSource", filename } })
{
}

しかし、2番目にこれを行う方法はありますか?上記のように新しい辞書を作成したいのですが、「オプション」と呼ばれる既存の辞書にすでにあるオプションもコピーする必要があります。

4

1 に答える 1

6

もちろん、既存のコンストラクターのコピーを作成するコンストラクターを呼び出すだけです。

public SqlCeDB(string filename, Dictionary<string, string> options)
    : this(new Dictionary<string, string>(options) {
               { "DataSource", filename }
           })
{
}

コレクション初期化子は、パラメーター化されたコンストラクターを通常どおり呼び出すことができます。ただし、これにより新しい辞書が作成されることに注意してください。既存のエントリに新しいエントリを追加するだけではありません。

于 2012-07-08T18:30:21.760 に答える