2011-03-27 246 views

回答

77

typeof(Foo)是一個靜態類型的查找;實質上它發生在編譯時,所以你只能得到明確命名的類型。

的GetType()是一個動態的類型查找;這是一個在運行時被調用的虛擬方法,即使使用多態性也會給出確切的類型。所以它理論上是「較慢」的,但它給了你從typeof(T)得不到的東西。如果你的設計需要一個或另一個,速度不會是一個因素。

+1

邁克 - 你削減了'評論',並提供了一個簡潔的定義。 +1 – 2011-03-27 18:10:18

13

除了性能問題,在提供的示例中,GetType甚至不是一個選項,因爲它是實例方法;它不能從字段初始值設定項中調用。在任何情況下,由於目的是從一個靜態的「語境」初始化靜態場,邏輯上this引用不能提供 - 如此下去靜態構造函數的路線不會與允許GetType幫助的。

// Can't use GetType() - the this reference is not available. 
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp)); 
+0

你說得對,是我的錯沒有注意到'static'關鍵字:) – 2011-03-27 18:04:27

+2

@Ani,但性能怎麼樣,當兩個對象和類型名稱是已知的? – Shimmy 2012-01-26 05:01:58