2009-01-30 44 views
23

Thứ tự mà tôi đặt thuộc tính bằng cú pháp khởi tạo đối tượng có được thực hiện theo cùng thứ tự chính xác không?Thứ tự các phép toán sử dụng Cú pháp đối tượng khởi tạo

Ví dụ nếu tôi làm điều này:

var s = new Person { FirstName = "Micah", 
        LastName = "Martin", 
        IsLoaded = true 
        } 

sẽ mỗi tài sản được thiết lập theo thứ tự giống nhau không?

Trả lời

36

Có.

Xin lỗi vì bị gián đoạn (Tôi phải thực sự thực hiện một số công việc thường xuyên). Spec không rõ ràng nói nó, nhưng nó làm cho nó khá rõ ràng IMO trong phần 7.6.10.2:


Một đối tượng khởi tạo bao gồm một chuỗi các initializers thành viên, được bao bọc bởi {và} thẻ và tách bằng dấu phẩy.

(Lưu ý từ "chuỗi" ở đây, chứ không phải là "thiết lập" Cá nhân tôi nghĩ rằng đó là quan trọng, như là một chuỗi được đặt hàng..)

Lớp sau đây đều là một điểm với hai tọa độ:

public class Point 
{ 
    int x, y; 
    public int X { get { return x; } set { x = value; } } 
    public int Y { get { return y; } set { y = value; } } 
} 

một ví dụ tại điểm có thể được tạo ra và khởi tạo như sau:

Point a = new Point { X = 0, Y = 1 }; 

trong đó có tác dụng tương tự một s

Point __a = new Point(); 
__a.X = 0; 
__a.Y = 1; 
Point a = __a; 

trong đó __a là biến tạm thời vô hình và không thể truy cập được.


EDIT: Tôi đã có phản hồi từ Mads Torgersen, người đã cơ bản nói rằng mọi thứ có thể thực hiện bây giờ sẽ bảo toàn đơn đặt hàng. Có thể có một số điều kỳ lạ trong tương lai, khi đơn hàng không được bảo quản trong các trường hợp lạ khi bạn đang làm một điều gì đó khác hơn là đặt thuộc tính/trường, nhưng điều đó sẽ tùy thuộc vào ngôn ngữ.

Thật đáng để chỉ ra rằng thực tế có rất nhiều bước đang diễn ra ở đây - có thứ tự thực hiện đánh giá các đối số (tức là các bit RHS) và thứ tự thực hiện các bài tập. Ví dụ, nếu bạn có:

new Foo 
{ 
    A = X, 
    B = Y 
} 

tất cả các đơn đặt hàng sau đây có thể xảy ra trong khi vẫn duy trì trật tự của việc thực hiện bất động sản thực tế (A và B):

  • Đánh giá X, gán cho A, đánh giá Y, gán cho B
  • đánh giá X, đánh giá Y, gán cho A, gán cho B
  • đánh giá Y, đánh giá X, gán cho A, gán cho B

Tôi tin rằng tùy chọn đầu tiên là lựa chọn thực sự được thực hiện, nhưng đây chỉ là để chứng minh rằng có nhiều thứ hơn là đáp ứng mắt.

Tôi cũng sẽ rất cảnh giác thực sự viết code mà phụ thuộc vào này ...

+1

Dude! Bạn tốt hơn Chuck Norris! – Micah

+3

bạn là tài liệu tham khảo. – Micah

+1

Mối quan tâm lớn nhất của tôi là các bài tập diễn ra theo thứ tự tôi liệt kê chúng. Tôi không quan tâm đến thứ tự đánh giá bên phải nhiều như tôi về thứ tự thực sự bên trái. – Micah

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