2010-06-30 74 views
14

我很好奇C#中typeof的「方法體」是什麼樣子的(很確定我無法在反射器中找到它,因爲它是一個關鍵字而不是方法)。'typeof'是如何工作的?

我猜測它相當於GetType(魔術轉換符號到字符串)。

查看Reflector中的GetType(字符串),它調用一個方法「PrivateGetType」,它調用「RuntimeTypeHandle.GetTypeByName」,RuntimeTypeHandle似乎有很多類型背後的邏輯,但GetTypeByName的東西沒有顯示在反射器。

回答

13

如果你做這樣的事情:

Type t = typeof(string); 

那麼編譯器編譯typeof(string)位爲ldtoken MSIL指令,然後調用Type.GetTypeFromHandle得到Type類的一個實例。

Type.GetTypeFromHandle由運行時實現(這就是爲什麼用「MethodImplOptions.InternalCall」屬性標記)。你可以看看源代碼單聲道如何實際實現,但你基本上必須瞭解整個元數據系統,以瞭解Type和朋友如何在內部工作...

+0

謝謝這是現貨。正如你所說的GetTypeFromHandle也是extern,但我正在考慮尋找mono的這種事情,所以它可能是值得的時間投資。 – 2010-06-30 02:00:39