2010-03-19 32 views
5

Mọi thứ về Type đều phản chiếu trong tự nhiên. Có phải vì Type được sử dụng thường xuyên hơn các lớp còn lại trong System.Reflection? Hoặc bởi vì nó hoạt động giống như một lớp hệ thống hơn là một lớp phản chiếu?Tại sao không phải là lớp Loại trong không gian tên System.Reflection?

Tóm lại, tôi luôn tự hỏi động lực đằng sau vị trí của System.Type là gì.

+0

Có thể vì đó là cơ chế phản ánh. Nó giống như đôi mắt của bạn. Bạn sẽ không bao giờ thực sự nhìn thấy đôi mắt của bạn. Bạn sẽ chỉ, tốt nhất, nhìn thấy sự phản chiếu của đôi mắt của bạn. –

+0

Chắc chắn, đôi mắt là một cơ chế để xem sự phản ánh của chính mình. Mặc dù nhận xét chỉ tăng cường câu hỏi. Vì bạn không thể trực tiếp nhìn thấy đôi mắt của chính bạn (tức là không thể trực tiếp nhìn thấy thông tin loại), bạn cần một số loại phản ánh để nhận bất kỳ thông tin nào (tức là 'Loại'). – Joe

Trả lời

1

Lớp Loại được sử dụng ở nhiều nơi hơn, không chỉ System.Reflection. Một tìm kiếm nhanh với Reflector cho thấy hàng trăm người trong số họ. Nó là rất quan trọng trong System.Configuration, System.Data, System.Drawing, System.Linq, System.Windows.Forms, vv Cách mà cá thể Type thực sự được sử dụng trong các lớp này không hiển thị. Có khả năng System.Reflection được sử dụng nhưng đó là một chi tiết thực hiện mà không hề ảnh hưởng đến chương trình. Để tạo ra thể hiện Loại mà các lớp này cần là tầm thường với toán tử typeof và object.GetType và bạn không bao giờ phải sử dụng System.Reflection trừ khi bạn thực sự viết mã phản chiếu, Type chắc chắn xứng đáng có một vị trí dễ truy cập trong Không gian tên hệ thống.

1

Một hội đồng có các loại và Assembly nằm trên System.Reflection thật kỳ lạ.

Vì vậy, tôi đoán là nó có liên quan đến việc thực hiện phương pháp ObjectGetType trả về Type.

+1

Ngẫu nhiên, 'Object.getClass' trong Java song song với điều này. –

+0

Mặc dù bởi cùng một logic, không nên 'MemberInfo' được trong không gian tên' System' là tốt? 'Type' thực hiện' GetMember() 'trả về' MemberInfo'. Chuyển tiếp tham chiếu của các không gian tên xảy ra khắp nơi trong BCL. – Joe

+0

@Arc, thực sự, nhưng trường hợp sử dụng 'Object.GetType()' thường được sử dụng nhiều hơn 'Object.GetType(). GetMember()'. –

0

Tôi đoán đó là vì Object làm phương thức GetType.

Thực hành mã hóa MS cho biết một lớp không nên tham chiếu một loại trong một tên miền con. Trong thực tế, BCL vi phạm quy tắc này khá thường xuyên; o)

Các vấn đề liên quan