2012-06-27 19 views
18

System.Type chứa thuộc tính UnderlyingSystemType. Msdn states rằng nó:Khi nào kiểu UnderlyingSystemType khác với thể hiện Loại hiện tại

Cho biết loại được cung cấp bởi thời gian chạy ngôn ngữ chung là đại diện cho loại này.

Trong hầu hết các trường hợp, thuộc tính này chỉ trả về phiên bản Type hiện tại.

Câu hỏi của tôi là, trong trường hợp nào, thuộc tính này không phải là trả lại bản sao hiện tại Type chính nó. Và trong những trường hợp đó, loại trường hợp nào sẽ là trường hợp hiện tại Type và loại hệ thống cơ bản được trả lại là?

+3

Can't cho bạn biết chính xác lý do tại sao nhưng đây là một bài viết về thực tế (http: //bradwilson.typepad.com/blog/2009/02/when-is-a-type-not-a-type.html) – Jehof

+1

http://catalog.codeproject.com/Questions/366922/Whats-the-difference -between-UnderlyingSystemType chứa một số thông tin về điều này. –

+4

Tôi sẽ đợi Jon Skeet. Anh ta không bao giờ làm tôi thất vọng. – nullpotent

Trả lời

5

Thành thật mà nói, tôi không bao giờ tự mình làm điều đó, nhưng tôi biết rằng bạn có thể tự tạo ra định nghĩa của riêng mình theo định nghĩa của mình là RuntimeType.

Nếu bạn nhận thấy lớp Type là trừu tượng và có rất nhiều bộ nhớ trừu tượng. Điều gì xảy ra là loại của bạn (bất kể nó là gì) tự động tạo RuntimeType bắt nguồn từ lớp Type và triển khai nó cho loại của bạn.

Vì vậy, các tài sản UnderlyingSystemType trong trường hợp orindary RuntimeType sẽ trở lại giá trị bình đẳng Type sở hữu, trong trường hợp thực hiện overriden, thay vào đó, (có nghĩa là cho ảnh hưởng đến hành vi relfection, nhưng tôi nhắc lại Cá nhân tôi không bao giờ làm điều này trước đó), sẽ trở lại sử dụng giá trị loại đã xác định.

EDIT

Trên thực tế vào liên kết được cung cấp bởi chàng trai trong ý kiến ​​là một tốt nhất:

When is a Type not a Type?

+0

bài viết đó thực sự hữu ích, cảm ơn – wodzu