IDictionary<TKey, TValue>
được kế thừa từ IEnumerable<KeyValuePair<TKey, TValue>>
, nhưng IDictionary
vì một số lý do không được kế thừa từ IEnumerable<DictionaryEntry>
. Tôi tự hỏi tại sao? Tôi ghét phải viết điều này một cách xấu xí .OfType<DictionaryEntry>()
mỗi khi tôi cần truy vấn một số IDictionary
.Tại sao IDictionary (phi chung) kế thừa từ IEnumerable <DictionaryEntry>?
6
A
Trả lời
3
Thực hiện thay đổi đó sẽ phá vỡ mọi triển khai hiện tại của giao diện (vì chúng đột nhiên thiếu một số phương thức mà giao diện cho biết chúng phải có).
Hơn nữa, IDictionary chỉ tồn tại cho khả năng tương thích cũ từ thời gian trước khi Generics. Bạn không nên sử dụng nó trong mã mới, trừ khi thực sự cần thiết. Nếu bạn đang thực sự làm việc với các loại đối tượng, bạn có thể sử dụng đối tượng IDictionary <, đối tượng > thay thế.
4
Bởi vì IDictionary
là giao diện cũ hơn (tiền chất). Thay đổi nó sẽ phá vỡ mã hiện có. Nó là một di sản.
Vì vậy, vấn đề cơ bản là tại sao bạn (vẫn) sử dụng các lớp dựa trên IDictionary và bạn không thể nâng cấp?
Các vấn đề liên quan
- 1. Tại sao IEnumerable <T> kế thừa từ IEnumerable?
- 2. Tại sao HttpSessionState không triển khai IDictionary?
- 3. C#: Thừa kế thừa kế
- 4. Tại sao TreeNodeCollection không ngụ ý IEnumerable <TreeNode>?
- 5. Các loại giá trị kế thừa từ System.Object ... tại sao?
- 6. Trình nghe Java phải kế thừa từ java.util.EventListener - tại sao?
- 7. tại sao kế thừa từ đối tượng loại
- 8. Tại sao NSOrderedSet không được kế thừa từ NSSet?
- 9. Tại sao IEnumerable <struct> không thể xem như IEnumerable <object>?
- 10. Phương pháp mở rộng đơn trên IDictionary <K, IEnumerable/IList/ICollection <V>>
- 11. Làm thế nào để thực hiện chung IEnumerable hoặc IDictionary để tránh CA1006?
- 12. lớp con kế thừa giao diện chung
- 13. lớp cơ sở chung kế thừa từ giao diện Generic
- 14. Thừa kế chung và gọi GetMethod(). GetReturnType()
- 15. C++ tại sao thừa kế ảo cho phép phòng ngừa thừa kế tiếp theo?
- 16. kế thừa từ một căn cứ enable_if'd
- 17. Thừa kế thừa kế và thừa kế phương thức
- 18. IEnumerable.GetEnumerator() và IEnumerable <T> .GetEnumerator()
- 19. quá tải << toán tử và lớp kế thừa
- 20. Cách tốt nhất để dịch từ IDictionary sang IDictionary chung là
- 21. Sự khác nhau giữa IEnumerable và IEnumerable <T>?
- 22. Tại sao mô-đun thừa kế Ruby không hoạt động như kế thừa lớp?
- 23. Làm cách nào để tôi có thể kế thừa từ ArrayList <MyClass>?
- 24. Tại sao IList <T> không có phương thức Chèn lấy IEnumerable <T>?
- 25. Tại sao một chức năng mất IEnumerable <interface> không chấp nhận IEnumerable <class>?
- 26. Tại sao từ điển <TKey, TValue> không có một trình duyệt <KeyValuePair <TKey, TValue >>?
- 27. Thừa kế - tại sao điều này bất hợp pháp?
- 28. Tại sao tôi không thể kế thừa các lớp tĩnh?
- 29. Truyền từ IEnumerable <Object> tới IEnumerable <string>
- 30. trả về một số chung IEnumerable <T>