クラス コンストラクターは、変数の既定値を設定するのに最適な場所ですか?
私が継承したほとんどのコードでは、そのように思われます。
例
public class foo
{
public bool IsAcidic { get; set; }
public foo()
{
IsAcidic = false;
}
}
これはあなたがそれを行う方法ですか?
その特定のオブジェクトの任意のインスタンスにいくつかのデフォルト値を割り当てたい場合は、コンストラクターがデフォルト値を割り当てるのに最も適切な場所ですが、型のデフォルト値をフィールドに割り当てたい場合は、そうしません。何もしなければなりません。フィールドは、コンストラクターの前に型のデフォルト値で初期化されます。たとえば、int
型フィールドがある場合0
、デフォルトで割り当てられ、コンストラクターで何もする必要はありません。
変数は、その変数の作成にできるだけ近い値に(明示的または暗黙的に)設定する必要があります。
これは、C99(一例として)が輝き始めた場所です。その時点までは、関数の開始時に変数を作成する必要がありましたが、その時点では変数がどうあるべきかわからない場合があります。この切断を行うことにより、どの変数がどの値に設定されたかを追跡することが困難になりました。C99が機能の途中で新しい変数を作成する機能を導入したとき、この切断はなくなりました。
したがって、あなたの例では、コンストラクターでデフォルト値を設定するのが最善です。これは、コンストラクターで変数が存在する場所だからです。
コンストラクターでそれを行わない場合(たとえば、init
メソッド呼び出しで行われる場合)、これらの変数が別の変数に設定されるときがあるため、これはデフォルト値ではありません。