Как работает "typeof"?

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

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

Глядя на GetType (string) в Reflector, он вызывает метод "PrivateGetType", который вызывает "RuntimeTypeHandle.GetTypeByName", а RuntimeTypeHandle, похоже, имеет много логики для типов в нем, но материал GetTypeByName не показывает в рефлекторе.

Ответы

Ответ 1

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

Type t = typeof(string);

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

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