私はビル・ワーグナーによるEffective C#を読んでいます。で項目14 -重複の初期化ロジックを最小化し、彼は、コンストラクタに新しいオプションのパラメータ機能を使用して、次の例を示します。
public MyClass(int initialCount = 0, string name = "")
彼がの""
代わりに使用したことに注意してくださいstring.Empty
。
彼はコメントします:
(上記の例では)2番目のコンストラクターが、より慣習的なではなく、nameパラメーターのデフォルト値に ""を指定したことに注意してください
string.Empty
。これstring.Empty
は、がコンパイル時の定数ではないためです。これは、文字列クラスで定義された静的プロパティです。コンパイル定数ではないため、パラメータのデフォルト値には使用できません。
string.Empty
すべての状況でstaticを使用できない場合、それはその目的を無効にしませんか?空の文字列を参照するシステムに依存しない手段があることを確認するためにそれを使用すると思いました。私の理解は間違っていますか?ありがとう。
更新
ただフォローアップコメント。MSDNによると:
オプションの各パラメータには、定義の一部としてデフォルト値があります。そのパラメーターに引数が送信されない場合、デフォルト値が使用されます。デフォルト値は定数でなければなりません。
次にSystem.Environment.NewLine
、どちらも使用できません。または、新しくインスタンス化されたオブジェクトをデフォルト値として使用できません。私はまだVS2010を使用していませんが、これは残念です。