Có một sự chồng chéo riêng biệt giữa những gì bạn có thể làm với cả hai. Công cụ phản chiếu ComponentModel chỉ là một lớp thân thiện nhỏ hơn trên System.Reflection?Sự khác biệt giữa phản ánh ComponentModel (ví dụ: PropertyDescriptor) và phản ánh tiêu chuẩn (ví dụ: PropertyInfo)?
Trả lời
Không - có nhiều hơn. ComponentModel cho phép bạn thực hiện một số thứ kiểu DLR, chẳng hạn như các thuộc tính thời gian chạy. Đây là cách một DataView cho thấy các cột vào một lưới - chúng không phải là các thuộc tính phản chiếu - chúng là các thuộc tính thời gian chạy. Các từ khóa ở đây là ICustomTypeDescriptor
và TypeDescriptionProvider
.
Mô hình này cũng cho phép trừu tượng và vô hướng. Ví dụ, nếu bạn đang làm rất nhiều sự phản ánh trên các thuộc tính, hãy xem xét HyperDescriptor - đây là một tiện ích mà tôi đã viết sử dụng thực hiện PropertyDescriptor
tùy chỉnh để hoán đổi mô hình phản chiếu cho một mô hình được biên dịch trước, để tăng hiệu suất rất lớn.
Về mặt sử dụng, có một số khác biệt khác; ComponentModel chỉ hỗ trợ một cá thể duy nhất của bất kỳ thuộc tính nào trên một thành viên (không giống như sự phản chiếu, trong đó nhiều thuộc tính giống nhau được cho phép). Và đó là trung tâm dữ liệu - vì vậy các thuộc tính tồn tại, cũng như các sự kiện (chủ yếu dành cho thông báo thay đổi) - nhưng không có trường và phương thức nào.
Nó cũng có hỗ trợ tốt cho i18n - kể từ DisplayName vv có thể được tùy chỉnh khi đang di chuyển.
Tuy nhiên, ComponentModel không (trực tiếp) tương thích với những thứ như LINQ (MemberExpression nói riêng) - vì điều này muốn liên kết với dữ liệu phản ánh.
Cuối cùng, ComponentModel được sử dụng rất nhiều trong IDE bởi những thứ như PropertyGrid (đây là những thứ như các thuộc tính phụ cho công cụ mẹo), nhưng hầu như tất cả các ràng buộc dữ liệu UI đều xảy ra thông qua ComponentModel (vì điều này cho phép ràng buộc hỗ trợ DataTable, các lớp và bất kỳ thứ gì khác mà bạn có thể nghĩ đến).
- 1. Sự khác nhau giữa focusin/tiêu điểm và tiêu điểm/mờ, ví dụ
- 2. Phản ánh C#: Nếu ... khác?
- 3. Xử lý phản hồi chunked với ví dụ phun
- 4. Sự mơ hồ giữa Mã số tĩnh và Ví dụ
- 5. Sự khác biệt giữa nền tảng phát triển API, ví dụ: APIGEE và ESB
- 6. Mục tiêu-C có phản ánh không?
- 7. Java bằng(): để phản ánh hoặc không phản ánh
- 8. HDF5 Ví dụ mã
- 9. Phản ánh trong C++
- 10. Phản ánh trên Java
- 11. Ví dụ về'instanceof'
- 12. Sự khác biệt giữa hai ví dụ Lua này là gì? Là một tốt hơn?
- 13. Sự khác biệt giữa phản chiếu dựa trên gương và phản xạ truyền thống là gì?
- 14. Phản ánh và loại chuyển đổi Python
- 15. Phản ánh trong PLSQL?
- 16. Trường hợp sử dụng để phản ánh
- 17. phản ánh scala: getDeclaringTrait?
- 18. "ví dụ" tiêu đề trong twitter bootstrap
- 19. tiêm TypeLiteral với sự phản ánh
- 20. Ví dụ mẫu C++ variadic Ví dụ bất thường
- 21. Đi mẫu ví dụ
- 22. Ví dụ về các ví dụ điển hình
- 23. Sự biện minh cho sự phản ánh trong C#
- 24. Sự phản ánh và điều hành quá tải trong C#
- 25. Ví dụ và mẹo về Crypto API của Window C/C++ Ví dụ và mẹo
- 26. ví dụ mochijson2!
- 27. hành vi kỳ lạ với sự phản ánh trong Scala
- 28. Ví dụ Monoid Monad
- 29. UnityContainerExtension ví dụ
- 30. Chạy ví dụ CRFSuite
Tôi biết điều này là cũ hơn những ngọn đồi nhưng bạn có thể giải thích một số điều bạn có thể và không thể làm trong LINQ nếu bạn sử dụng System.ComponentModel để phản ánh? – wootscootinboogie
@woot đó là câu trả lời ngắn: LINQ không quan tâm đến ComponentModel –