クラスAは初期化リストを使用してメンバーをパラメーター値に設定し、クラスBはコンストラクターの本体内の割り当てを使用します。
私が一貫している限り、誰かが他のものよりもどちらかを好む理由を与えることはできますか?
class A
{
String _filename;
A(String filename) : _filename(filename)
{
}
}
class B
{
String _filename;
B(String filename)
{
_filename = filename;
}
}
最初のものはC#では合法ではありません。コンストラクターでコロンの後に表示できるのは、base
とthis
の2つだけです。
だから私は2番目のものを使います。
C#ではなくC++ですか?
C++の場合、いくつかの理由により、初期化リストは代入よりも優れています。
C#には Object Initializer と呼ばれる機能があります。指定したメンバーを初期化するためにコンパイラーが使用する値を提供し、デフォルトのコンストラクターを呼び出すことができます。これを機能させるには、デフォルトのパブリックコンストラクターが必要です。