2011-06-22 7 views
1

私は次のクラスを持っている:クラスコンストラクタで初期値を設定する必要はありますか?

public class Detail 
    { 

     public Detail() 
     { 
      this.File = String.Empty; 
      this.State = false; 
      this.Tag1 = 0 
     } 

     public string File { get; set; } 
     public bool State { get; set; } 
     public int Tag1 { get; set; } 
    } 
} 

私はコンストラクタで、このような初期値を設定する必要はありますか私はクラスを作成するときに、これらだけでデフォルト設定されます。プログラミングの練習はいかがですか?必要ない場合でもここに設定する方が良いでしょうか?

答えて

5

StateTag1はそれぞれfalse0にデフォルト設定されますが、Filenullにデフォルト設定されます。 string.Emptyが必要な場合は、それを割り当てる必要があります。

0

メンバーフィールドは、あなたのためのデフォルト値で初期化されます。だから、いいえ、あなたは値がデフォルト(intため0boolためfalse、参照型のためnull)である場合に設定する必要はありません。ただしstring.Emptyは、stringのデフォルト値ではありません。 nullがあなたのために働かないならば、string.Emptyにそれを設定する必要があります。

フィールドの初期値は、それが静的フィールドまたはインスタンスフィールドであるかどうか、フィールドの型のデフォルト値です。

変数のデフォルト値は、変数の種類に依存し、以下のように決定される。

  • 値型の変数の場合、デフォルト値は、によって計算された値と同じです参照型の変数の値型のデフォルトコンストラクタ
  • 、デフォルト値は
0

nullではありません、あなたはこれを行う必要はありません。クラスのコンストラクタが呼び出されると、すべてのプロパティ値が自動的にデフォルト値に設定されます。 C#のデフォルト値については、this pageを参照してください。

あなたではなく、文字列が空ではなく、ヌル、またはかどうかであるか、またはしたい場合は、コレクション(例えばリスト)ただし、自動的に初期化されなければならない場合は、それを検討する必要があります

。あなたが確かにしたことは、まったく悪い練習ではなく、ただ不必要なことです。

0

明示的なバッキング変数を持っていないので、明らかに、あなたの例では、あなたは、プロパティ自身でそれらを設定することはできません。

あなたはコンストラクタでデフォルト値を設定すると、それは大丈夫ですが、あなたは常にあなたが持つかもしれ他人からそのコンストラクタを呼び出すように注意する必要があり、同様に:

public Foo() { 
    this.Happy = true; 
    this.BasicUnit = 92; 
} 

public Foo (bool happy) : this() { 
    this.Happy = happy; 
} 

それが、わずか混乱得ることができます何が何。ですから、私は個人的に、バッキング変数にデフォルト値を明示的に設定したいと思います。

- 編集:私はあなたの質問を誤解しているかもしれ参照 - 他の人が言ってきたように、すべてのメンバ変数は、デフォルト値が与えられている、ローカル変数ではありません。

関連する問題