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 { };
}
}
得到此類型
回答
快速谷歌搜索發現這一點:
的GetType是在 運行展開了對對象的實例調用。 typeof()會解析爲運行時的 調用,但會從類型的 令牌中加載類型。它們可能解析爲相同的調用,它只是 GetType需要一個實例。如果 我不需要這個實例,我會用 使用typeof。
也:
另外要注意的GetType是虛擬的, 併爲您提供了對象的類型, 未聲明的類型的 參考。那就是:
Object o = new String();
的typeof(O)對象類型
o.GetType()字符串類型
在你的第二個例子中,你是不是指'o.GetType()'而不是'typeof(o)'? – 2010-07-09 21:24:24
是的,你是對的。現在編輯 – Swift 2010-07-09 21:43:26
擔心性能前的正確性。如果有從TestClass
派生的任何類,則不會得到相同的結果。
如果是密封課程會怎麼樣? – 2010-07-09 19:08:49
然後你會得到相同的'Type','typeof'會更快。 – 2010-07-09 21:23:59
http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_GetType_and_typeof
http://blogs.msdn.com/b/csharpfaq/archive/2004/10/20/245231.aspx
你引用的第二篇文章說typeof()的好處在於你不需要構造這個類型的對象。然而,在avove的例子中,對象已經被構建。 – 2010-07-09 19:34:32
其實我已經測量了一個講座中,我曾經給了(在反射和優化)的這種差異。
底線:如果你打算在調用該行數十億次,你會使用的typeOf()
代替GetType()
我讀了某處(http://msdn.microsoft.com/en-us/magazine/cc163759.aspx)關於Reflection,GetType的調用在JIT編譯器中進行了特別優化,因爲它是如此普遍與其他反射操作(例如爲特定類型的成員查找MemberInfo)相反。 – 2010-07-09 19:57:01
'GetType'已經過優化。這仍然沒有像'typeof'那麼快。 – 2010-07-10 06:59:51
@本,我絕對同意。我的意思不是聽起來像我一般建議使用GetType而不是Typeof,所以非常感謝你的支持。這篇文章實際上提到了操作類型也被優化了。 – 2010-07-10 20:14:50
- 1. 從類型得到一個值類型
- 2. AutomationElement得到真實類型
- 3. 得到類型的「id」
- 4. 泛型得到的類名
- 5. 找不到此參考的類型庫
- 6. 思考無法得到類類型
- 7. 得到錯誤收到類型「mytasks.add」
- 8. 爲什麼我得到:'System.Collections.IEnumerable'沒有類型參數,因此不能有類型參數?
- 9. 爲什麼當發射通過值類型泛型相互引用的類時,我會得到此異常?
- 10. 如何在取消其他類型後得到您獲得的類型?
- 11. GraphQL:Query.type字段類型必須是輸出類型,但得到:undefined
- 12. C#鑄造類型與類型名得到的字符串
- 13. 得到模板類型轉發的類型,而不是爭論
- 14. Edge.node字段類型必須是輸出類型,但得到:undefined
- 15. 得到部分彼此
- 16. 無法得到此工作
- 17. Java:獲得泛型類型
- 18. 我得到類型不匹配錯誤
- 19. 得到$從類型_POST =文件
- 20. Objective-C中得到MIME類型是
- 21. 得到從類獲取財產型號
- 22. Unity3d,得到具體的組件類型
- 23. Jsoup得到錯誤的貨幣類型
- 24. 的Rails得到的類型(ENUM)
- 25. 得到int類型的touchJson數據
- 26. 的Javascript得到MIME類型的支持
- 27. 阿卡得到類型演員
- 28. OCaml中得到瘋狂的類型
- 29. 得到paramterized類型的Java反射
- 30. 實體框架ctp5得到unproxied類型
現在我正在尋找保存第二... 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
你的兩個陳述並不總是相同的。因此,對於「更好」或「重要」問題的答案是:這取決於。 – 2010-07-09 19:11:16
@Esteban - 你說的沒錯。我猜想更好的問題是「你應該什麼時候使用哪個?」。 – 2010-07-09 19:38:18