Ủy ban thiết kế C# có bao giờ coi cú pháp tạo đối tượng này không?
Có, chúng tôi có. Chúng tôi đã xem nó một vài năm trước đây. Như bằng chứng về tuyên bố này, xem đoạn cuối cùng của bài viết của tôi ở đây:
http://blogs.msdn.com/b/ericlippert/archive/2009/01/26/why-no-var-on-fields.aspx
Sự đồng thuận của đội ngũ thiết kế là rằng đây là một "thú vị khi có" tính năng nhưng không đủ thuyết phục rằng đó là giá trị chi phí đáng kể về thiết kế, triển khai, thử nghiệm, ghi chép và duy trì tính năng này.
Tôi cũng lưu ý rằng các nhận xét về mục nhập blog mà tôi liên kết đến rất tiêu cực về tính năng này; có vẻ như rất nhiều người thấy cú pháp không hấp dẫn. Đó cũng là điểm chống lại việc thực hiện tính năng này.
Tuy nhiên, cú pháp được đề xuất trở nên đặc biệt tốt đẹp nếu bạn có thể kết hợp cú pháp với các tính năng ngôn ngữ khác quảng bá tuyên bố ngắn gọn về các loại không thể thay đổi; nếu chúng ta làm một tính năng như vậy trong một phiên bản tương lai giả định của ngôn ngữ, thì cú pháp bạn đề xuất sẽ trở nên hấp dẫn hơn.
Tôi lưu ý thêm rằng chúng tôi nói chung chống lại các tính năng yêu cầu suy luận từ "bên ngoài" thành "bên trong"; chúng tôi thích luồng thông tin kiểu đó từ trong ra ngoài.Hãy xem xét ví dụ vấn đề này:
M(new(blah));
Giả sử M có hai quá tải, một trong đó có một C, và một trong đó có một D. Có phải đó là "mới C (blah)" hoặc "mới D (blah)"? Nó có thể là một trong hai. Bây giờ chúng ta phải phân tích cả hai! Và nếu cả hai đều làm việc thì chúng ta phải tìm ra cái nào tốt hơn.
Nó trở nên tồi tệ hơn. Giả sử bạn có
M(new(new(blah)));
nơi một lần nữa M mất một C và D, và C có hai cấu trúc mà phải mất một E hoặc F, và D có hai cấu trúc mà phải mất một G và H. nào:
M(new C(new E(blah)));
M(new C(new F(blah)));
M(new D(new G(blah)));
M(new D(new H(blah)));
được chọn và tại sao?
Khi bạn lý do từ bên ngoài vào bên trong, bạn nhanh chóng vào "các vụ nổ kết hợp", trong đó số trường hợp cần phân tích trở thành O (c n) ở độ sâu của lồng.
C# làm lý do theo cách này cho lambdas và đó là một trong những phần khó nhất của trình biên dịch để thực hiện và chính xác, tin tôi đi. Chúng tôi không mong muốn thêm một tính năng tương tự cho các nhà xây dựng. Nếu chúng ta thêm cú pháp này, nó có lẽ sẽ bị giới hạn trong các kịch bản trong đó loại được biết rõ ràng bằng cách phân tích phía bên trái của một khai báo biến hoặc biểu thức gán.
(Như mọi khi, tôi lưu ý rằng các suy nghĩ của Eric về các tính năng ngôn ngữ tương lai giả định trong các sản phẩm không báo trước và hư cấu không có lịch biểu hoặc ngân sách chỉ dành cho mục đích giải trí và không được hiểu là lời hứa của bất kỳ sản phẩm cụ thể nào trong tương lai với bất kỳ bộ tính năng đặc biệt)
Hmm, điều này thật thú vị, +1. Tôi cũng vậy, như nó tốt hơn so với tùy chọn 'var' bởi vì nó nhận được thông tin kiểu ở bên trái nơi nó thuộc về. (Bây giờ có được ra bãi cỏ của tôi!) –
Tôi lưu ý rằng câu hỏi có phiếu bầu để đóng dựa trên "chủ quan và tranh luận". Câu hỏi không chủ quan cũng không tranh luận; câu hỏi là một câu hỏi thực tế đơn giản về việc liệu một tính năng cụ thể có đưa ra thảo luận trong cuộc họp thiết kế ngôn ngữ hay không; đó là câu hỏi về một sự kiện khách quan. Chỉ vì ít người biết câu trả lời không đặt ra một câu hỏi chủ quan hoặc tranh luận. –
@Eric, cho dù nó đến để thảo luận hay không không phải là một câu hỏi lập trình. Điều này sẽ trở thành "nên nó đã được thảo luận" hoặc "họ nên hỗ trợ nó", đó là chủ quan và tranh luận. –