Trong C #, tôi bắt đầu thấy tất cả các phương thức ma thuật này xuất hiện mà không được giao diện sao lưu. Tại sao điều này được chọn?
Hãy để tôi giải thích.
Trước đây trong C #, nếu một đối tượng triển khai IEnumerable
giao diện, nó sẽ tự động được lặp lại bởi một foreach
vòng lặp. Điều đó có ý nghĩa với tôi, vì nó được hỗ trợ bởi một giao diện, và nếu tôi có Iterator
chức năng riêng của mình trong lớp được lặp đi lặp lại, tôi có thể làm điều đó mà không phải lo lắng rằng nó sẽ có ý nghĩa kỳ diệu khác.
Bây giờ, rõ ràng, (không chắc chắn khi nào), các giao diện này không còn cần thiết nữa. Nó chỉ cần có các chuyển đổi đặt tên đúng.
Một ví dụ khác là làm cho bất kỳ đối tượng nào được chờ đợi bằng cách có một phương thức được đặt tên chính xác GetAwaiter
có một vài thuộc tính cụ thể.
Tại sao không tạo một giao diện như họ đã làm với IEnumerable
hoặc INotifyPropertyChanged
sao lưu "ma thuật" này lên tĩnh?
Thêm chi tiết về những gì tôi muốn nói ở đây:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Những ưu và nhược điểm của phương pháp ma thuật là gì, và có nơi nào trực tuyến mà tôi có thể tìm thấy bất cứ điều gì về lý do tại sao những quyết định này được đưa ra không?
async
/ await
, thì nó sẽ chỉ hoạt động với mã được viết sau khi .NET 4.5 trở nên phổ biến đủ rộng để trở thành mục tiêu khả thi mà hiện tại về cơ bản. Nhưng một bản dịch cú pháp thuần túy thành các cuộc gọi phương thức cho phép tôi thêm await
chức năng vào các kiểu hiện có sau khi thực tế.
foreach
vòng lặp trở lại lúc ban đầu. Có bao giờ đã là một yêu cầu đối với các đối tượng để thực hiện IEnumerable
cho foreach
đến công việc. Đó chỉ là quy ước để làm như vậy.