2013-06-21 10 views
6

これをC#で行うのは安全ですか?複数の代入(フィールド=プロパティ=値)

field = Property = value; 

は、セッターとゲッターを連続して呼ばれることを保証し、fieldのみゲッターの結果が割り当てられ、必ずしもvalueされますか?コンパイラはそれをただちにvalueに最適化しますか?ゲッターを呼び出していないようですので、私は唯一のセッターが出力ウィンドウに書き込まれます

 int s = TADA = 1; 

private int tada; 
    public int TADA 
    { 
     get 
     { 
      Console.WriteLine("GETTER"); 
      return tada; 
     } 
     set 
     { 
      Console.WriteLine("SETTER"); 
      tada = value; 
     } 
    } 

を使用して

+0

この場合、「Property」のゲッターは呼び出されません。 getterを実行する必要がある場合は、代入を分割する必要があります: 'Property = value; field = Property; ' –

+0

http://stackoverflow.com/questions/13714246/assignment-and-sequence-points-how-is-this-ambiguous – Azodious

答えて

4

C# Language Fundamentals

からあなたもこのように、複数の変数に同じ値を割り当てることができます。

int型のA、B、C、D;

a = b = c = d = 5;

この場合、a、b、c、およびdの値はすべて5になります。これは のように動作します。その は、d = 5です。その割り当て自体は値5の値を返します。 コンパイラは、その戻り値をcに代入します。 2番目の割り当て も値を返します。すべての変数が に割り当てられるまで続きます。

関連する問題