あなたが示したものは、オブジェクト初期化子と呼ばれ、C# 3.0 で導入された構文機能です。
これは、最初の行でオブジェクトを作成し、その後の行でそのプロパティを個別に設定する次のコードに似ています。
var dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Title = "Select configuration";
dlg.DefaultExt = ".xml";
dlg.Filter = "XML-file (.xml)|*.xml";
dlg.CheckFileExists = true;
ただし、上記のコードと同じではありません。オブジェクト初期化子を使用すると、コンパイラは一時変数を作成し、その一時変数に含まれるオブジェクトにプロパティを設定してから、その一時変数を宣言した実際の変数に割り当てます。最終的な結果として、オブジェクト インスタンスの作成はアトミックになります。詳細については、この質問への回答とこのブログ投稿を参照してください。
実際には、完全に展開すると、結果のコードは次のようになると想像できます。
var temporaryDlg = new Microsoft.Win32.OpenFileDialog();
temporaryDlg.Title = "Select configuration";
temporaryDlg.DefaultExt = ".xml";
temporaryDlg.Filter = "XML-file (.xml)|*.xml";
temporaryDlg.CheckFileExists = true;
var dlg = temporaryDlg;
どのコンストラクターが呼び出されるかについての質問については、はい、どちらの場合もデフォルトのコンストラクターです。最初の行は、コンストラクターの呼び出しnew
です。パラメーターが渡されないため、これがデフォルトのコンストラクターであることがわかります。