Как работает typeof? - PullRequest
14 голосов
/ 30 июня 2010

Мне любопытно, как будет выглядеть "тело метода" для typeof в C # (я уверен, что я не могу добраться до него в отражателе, поскольку это ключевое слово, а не метод).

Я предполагаю, что это эквивалентно GetType ( магический символ преобразования в строку ).

Глядя на GetType (строку) в Reflector, он вызывает метод «PrivateGetType», который вызывает «RuntimeTypeHandle.GetTypeByName», и RuntimeTypeHandle, похоже, имеет много логики, лежащей в основе типов, но вещи GetTypeByName не отображаются в отражателе.

1 Ответ

13 голосов
/ 30 июня 2010

Если вы делаете что-то вроде:

Type t = typeof(string);

Затем компилятор компилирует бит typeof(string) в инструкцию ldtoken MSIL и затем вызывает Type.GetTypeFromHandle , чтобы получить экземпляр класса Type.

Type.GetTypeFromHandle реализуется средой выполнения (поэтому он помечен атрибутом «MethodImplOptions.InternalCall»). Вы можете взглянуть на исходный код для mono, чтобы узнать, как он на самом деле реализован, но вы должны понять всю систему метаданных, чтобы понять, как Type и друзья работают внутри ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...