2013-06-21 37 views
6

Có an toàn để thực hiện việc này trong C# không?Nhiều nhiệm vụ (trường = Thuộc tính = giá trị)

field = Property = value; 

Có đảm bảo rằng các setter và getter được gọi là liên tiếp và sẽ field chỉ được giao kết quả của phương thức getter và không nhất thiết phải value? Trình biên dịch sẽ tối ưu hóa nó chỉ với value?

+0

Bộ khởi động trên 'Thuộc tính' sẽ không được gọi trong trường hợp này. Nếu bạn _need_ để có nó chạy qua getter, bạn cần phải tách bài tập: 'Property = value; field = Property; ' –

+0

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

Trả lời

4

Sử dụng

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

 int s = TADA = 1; 

tôi chỉ nhận được setter ghi vào sổ đầu ra, vì vậy nó không có vẻ để gọi getter.

Từ C# Language Fundamentals

Bạn thậm chí có thể gán giá trị tương tự cho nhiều biến, như thế này:

int a, b, c, d;

a = b = c = d = 5;

Trong trường hợp này, a, b, c và d tất cả sẽ có giá trị 5. Công trình này vì trình biên dịch C# thực hiện nhiệm vụ ngoài cùng bên phải trước; rằng là, d = 5. Bản thân nhiệm vụ đó trả về một giá trị, giá trị 5. Trình biên dịch sau đó gán giá trị trả về cho c. Bài tập thứ hai cũng trả về một giá trị, v.v. cho đến khi tất cả các biến đã được gán .

Các vấn đề liên quan