Có ai có thể cung cấp một senario thực tế khi Type Forward được sử dụng không?Loại chuyển tiếp
Trả lời
Các thư viện BCL thường sử dụng thuộc tính TypeForwardedTo
khi phiên bản khác nhau của khuôn khổ này di chuyển một loại giữa hội. Ví dụ, các đại biểu kiểu Func<>
được di chuyển từ System.Core trong khung công tác 3.5 sang mscorlib trong khung công tác 4.0.
Bạn có thể xem thế giới thực sử dụng điều này bằng cách mở System.Core.dll từ 4,0 trong ildasm, nhấp đúp vào nút Manifest và tìm kiếm cho tất cả các dòng tương tự như sau
.class extern forwarder System.Func`1
{
.assembly extern mscorlib
}
.class extern forwarder System.Func`2
{
.assembly extern mscorlib
}
.class extern forwarder System.Func`3
{
.assembly extern mscorlib
}
Từ msdn:
Ví dụ, giả sử một ứng dụng sử dụng lớp Ví dụ trong một assembly có tên là Utility.dll. Các nhà phát triển của Utility.dll có thể quyết định cấu trúc lại assembly, và trong quá trình này họ có thể di chuyển lớp Example đến một assembly khác. Nếu phiên bản cũ của Utility.dll được thay thế bằng phiên bản mới của Utility.dll và assembly đồng hành của nó, ứng dụng sử dụng lớp Example không thành công vì nó không thể định vị lớp Example trong phiên bản mới của Utility.dll.
Các nhà phát triển của Utility.dll có thể tránh điều này bằng cách chuyển tiếp các yêu cầu cho lớp Example, sử dụng thuộc tính TypeForwardedToAttribute. Nếu thuộc tính đã được áp dụng cho phiên bản mới của Utility.dll, các yêu cầu cho lớp Example được chuyển tiếp đến assembly đã chứa lớp đó. Ứng dụng hiện có tiếp tục hoạt động bình thường, không cần biên dịch lại.
Nói chung, dường như nó cho phép khả năng linh hoạt/tái cấu trúc trong các lớp thư viện của bạn. Tôi tìm thấy bài viết trên blog MSDN hữu ích. Trong bài viết này, một trong những ví dụ cho thấy một thư viện hiện có đang được chia thành 2 DLL riêng biệt, nơi ứng dụng sử dụng các thư viện sẽ không phải quan tâm đến một loại được chuyển sang một dll khác trong các phiên bản mới hơn của dll.
- 1. Các loại chuyển tiếp trong Microsoft Unity
- 2. Các loại chuyển tiếp trong JavaScript
- 3. Xcode: Loại bỏ cảnh báo lớp học chuyển tiếp
- 4. Nghiêm ngặt hoặc Chuyển tiếp?
- 5. Tính toán loại trực tiếp
- 6. paramiko chuyển tiếp
- 7. Redirect hoặc chuyển tiếp
- 8. Cổng Apache chuyển tiếp
- 9. Chuyển tiếp cổng
- 10. getComputedStyle và chuyển tiếp
- 11. Xóa chuyển tiếp CSS
- 12. Chuyển tiếp D3.js
- 13. Chuyển tiếp mảng 2D
- 14. Chuyển tiếp URL Jersey
- 15. WebView chuyển tiếp trang tiếp theo/trang trước
- 16. Loại tham chiếu trực tiếp trên heap, loại giá trị trực tiếp trên ngăn xếp
- 17. Chuyển tiếp tuyên bố lồng nhau enum
- 18. Chuyển tiếp cổng với paramiko
- 19. Chuyển tiếp cuộc gọi Twilio
- 20. Cách dừng chuyển tiếp CSS3
- 21. Java LinkedHashSet chuyển tiếp ngược
- 22. khai báo chuyển tiếp với vectơ loại lớp - con trỏ tới loại lớp không đầy đủ không được phép
- 23. chuyển tiếp khai báo hàm tĩnh C++
- 24. Chuyển tiếp tuyên bố của các loại/lớp lồng nhau trong C++
- 25. CSS3 chuyển tiếp chỉ khi lớp được bổ sung, không phải khi loại bỏ
- 26. Hiểu biết về các loại gốc, trong khi đồng thời chuyển tiếp
- 27. Loại mẫu đệ quy cho chuyển tiếp vùng chứa/tên tệp
- 28. Chuyển tiếp Tuyên bố của lớp trong C++, loại không đầy đủ
- 29. Lỗi - sử dụng không hợp lệ khai báo loại/chuyển tiếp không đầy đủ
- 30. Làm thế nào để loại bỏ sự chậm trễ trên Css3 Trượt ra chuyển tiếp trong đó sử dụng chuyển tiếp tối đa chiều cao
Tuyệt vời ví dụ. Bây giờ nếu chỉ có trình phân giải WCF sẽ tôn trọng 'TypeForwardedToAttribute' ;-p –