2010-07-09 21 views
1
class TestClass 
{ 
    public void Test() 
    { 
     //which is faster? 
     object o1 = MethodRequiringType(typeof(TestClass)); 
     object o2 = MethodRequiringType(this.GetType()); 
     //which is better? 
     //does it matter? 
    } 

    public object MethodRequiringType(Type t) 
    { 
     return new { }; 
    } 
} 
+0

現在我正在尋找保存第二... HTTP://計算器。 com/questions/983030/type-checking-typeof-gettype-or-is http://stackoverflow.com/questions/139607/what-is-the-difference-between-mycustomer-gettype-and-typeofcustomer-in -c – froadie 2010-07-09 19:08:04

+0

你的兩個陳述並不總是相同的。因此,對於「更好」或「重要」問題的答案是:這取決於。 – 2010-07-09 19:11:16

+0

@Esteban - 你說的沒錯。我猜想更好的問題是「你應該什麼時候使用哪個?」。 – 2010-07-09 19:38:18

回答

3

快速谷歌搜索發現這一點:

的GetType是在 運行展開了對對象的實例調用。 typeof()會解析爲運行時的 調用,但會從類型的 令牌中加載類型。它們可能解析爲相同的調用,它只是 GetType需要一個實例。如果 我不需要這個實例,我會用 使用typeof。

也:

另外要注意的GetType是虛擬的, 併爲您提供了對象的類型, 未聲明的類型的 參考。那就是:

Object o = new String();

的typeof(O)對象類型

o.GetType()字符串類型

+0

在你的第二個例子中,你是不是指'o.GetType()'而不是'typeof(o)'? – 2010-07-09 21:24:24

+0

是的,你是對的。現在編輯 – Swift 2010-07-09 21:43:26

3

擔心性能前的正確性。如果有從TestClass派生的任何類,則不會得到相同的結果。

+0

如果是密封課程會怎麼樣? – 2010-07-09 19:08:49

+0

然後你會得到相同的'Type','typeof'會更快。 – 2010-07-09 21:23:59

2

其實我已經測量了一個講座中,我曾經給了(在反射和優化)的這種差異。

底線:如果你打算在調用該行數十億次,你會使用的typeOf()代替GetType()

+0

我讀了某處(http://msdn.microsoft.com/en-us/magazine/cc163759.aspx)關於Reflection,GetType的調用在JIT編譯器中進行了特別優化,因爲它是如此普遍與其他反射操作(例如爲特定類型的成員查找MemberInfo)相反。 – 2010-07-09 19:57:01

+0

'GetType'已經過優化。這仍然沒有像'typeof'那麼快。 – 2010-07-10 06:59:51

+0

@本,我絕對同意。我的意思不是聽起來像我一般建議使用GetType而不是Typeof,所以非常感謝你的支持。這篇文章實際上提到了操作類型也被優化了。 – 2010-07-10 20:14:50