2013-06-21 10 views
6

Czy można to bezpiecznie wykonać w języku C#?Wielokrotne przypisanie (pole = Właściwość = wartość)

field = Property = value; 

To jest zagwarantowane, że setter i getter nazwać z rzędu i będzie field być przypisany tylko wynik getter i niekoniecznie value? Czy kompilator zoptymalizuje go do zaledwie value?

+0

W tym przypadku getter na 'Właściwość' nie zostanie wywołany. Jeśli chcesz odzyskać to przez getter, musisz oddzielić przypisanie: 'Właściwość = wartość; field = Właściwość; ' –

+0

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

Odpowiedz

4

Korzystanie

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

i

 int s = TADA = 1; 

ja tylko dostać SETTER napisany do okna wyjściowego, więc nie wydaje się, aby zadzwonić do getter.

Od C# Language Fundamentals

Można nawet przypisać taką samą wartość dla wielu zmiennych, jak to:

int a, b, c, d;

a = b = c = d = 5;

W tym przypadku wszystkie wartości a, b, c oraz d będą miały wartość 5. Działa to , ponieważ kompilator C# wykonuje najpierw prawostronne przypisanie; że jest, d = 5. To samo zadanie zwraca wartość, wartość 5. Kompilator następnie przypisuje tę zwróconą wartość do c. To drugie zadanie również zwraca wartość, i tak dalej, aż wszystkie zmienne zostaną przypisane .

Powiązane problemy