Trong thế hệ C #, chúng ta có thể khai báo một ràng buộc cho một tham số loại T
để có một hàm tạo mặc định, bằng cách nói where T : new()
. Tuy nhiên, không có loại ràng buộc nào khác như thế này là hợp lệ - new(string)
ví dụ, v.v.
Từ một thiết kế ngôn ngữ và / hoặc quan điểm thực hiện, lý do cho điều này là gì?
Có một cái gì đó trong cách các nhà xây dựng làm việc hoặc theo cách hệ thống loại được triển khai mà cấm điều này (hoặc ít nhất là làm cho nó khó hơn)? Nếu vậy, nó là cái gì? Tôi nhớ lại việc đọc ở đâu đó mà default(T)
thực sự biên dịch new T()
cho T : struct
. Có liên quan đến điều này, có thể?
Hay nó chỉ đơn giản là một quyết định thiết kế được đưa ra để tránh làm cho ngôn ngữ quá phức tạp?
new(string)
không phải là một ràng buộc xây dựng mặc định. Câu hỏi của bạn tương đương với câu nói "Tại sao không có các ràng buộc yêu cầu chữ ký của nhà xây dựng cụ thể?" Rất có thể bởi vì một ràng buộc như vậy sẽ không đặc biệt hữu ích.