2010-06-30 45 views
14

Tôi tò mò những gì "cơ thể phương pháp" cho typeof trong C# sẽ trông giống như (khá chắc chắn tôi không thể nhận được nó trong phản xạ vì nó là một từ khóa không phải là một phương pháp).'typeof' hoạt động như thế nào?

Tôi đoán nó tương đương với biểu tượng chuyển đổi ma thuật GetType (thành chuỗi).

Nhìn vào GetType (chuỗi) trong Trình phản xạ, nó gọi phương thức "PrivateGetType", gọi là "RuntimeTypeHandle.GetTypeByName" và RuntimeTypeHandle dường như có nhiều logic đằng sau các loại trong đó, nhưng công cụ GetTypeByName không hiển thị trong Reflector.

Trả lời

13

Nếu bạn làm điều gì đó như:

Type t = typeof(string); 

Sau đó trình biên dịch biên dịch các bit typeof(string) tới một chỉ dẫn ldtoken MSIL và sau đó gọi Type.GetTypeFromHandle để có được một thể hiện của lớp Type.

Type.GetTypeFromHandle được thực thi bởi thời gian chạy (đó là lý do tại sao nó được đánh dấu bằng thuộc tính "MethodImplOptions.InternalCall"). Bạn có thể xem mã nguồn để đơn giản về cách nó thực sự được triển khai, nhưng về cơ bản bạn phải hiểu toàn bộ hệ thống siêu dữ liệu để hiểu cách Type và bạn bè làm việc trong ...

+0

Cảm ơn đây là điểm bật. Như bạn đã nói GetTypeFromHandle là extern quá nhưng tôi đã xem xét xem xét mono cho loại điều này anwyay vì vậy nó có thể có giá trị thời gian đầu tư. –

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