在log4net configuration manual的第一個示例中,作者使用typeof(MyApp)
來獲取包含類MyApp
的類型。有沒有理由不使用this.GetType()
,性能明智?因爲在我看來,this.GetType()
複製到另一個類時可能會更加安全,避免複製粘貼錯誤。C#性能問題:typeof(MyClass)與this.GetType()
回答
typeof(Foo)是一個靜態類型的查找;實質上它發生在編譯時,所以你只能得到明確命名的類型。
的GetType()是一個動態的類型查找;這是一個在運行時被調用的虛擬方法,即使使用多態性也會給出確切的類型。所以它理論上是「較慢」的,但它給了你從typeof(T)得不到的東西。如果你的設計需要一個或另一個,速度不會是一個因素。
邁克 - 你削減了'評論',並提供了一個簡潔的定義。 +1 – 2011-03-27 18:10:18
除了性能問題,在提供的示例中,GetType
甚至不是一個選項,因爲它是實例方法;它不能從字段初始值設定項中調用。在任何情況下,由於目的是從一個靜態的「語境」初始化靜態場,邏輯上this
引用不能提供 - 如此下去靜態構造函數的路線不會與允許GetType
幫助的。
// Can't use GetType() - the this reference is not available.
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
你說得對,是我的錯沒有注意到'static'關鍵字:) – 2011-03-27 18:04:27
@Ani,但性能怎麼樣,當兩個對象和類型名稱是已知的? – Shimmy 2012-01-26 05:01:58
- 1. C#性能問題
- 2. C++性能問題
- 3. 在[MetadatType(typeof(myClass)]中驗證多字段
- 4. WCF:FaultContract(typeof(ExceptionDetail))問題
- 5. MongoDB C#低性能問題
- 6. C++容器性能問題
- 7. C#EMIT IL性能問題
- 8. 性能問題與FlexGrid的
- 9. Postgresql與HikariCP性能問題
- 10. 與性能cfdocument問題
- 11. typeof == ==「array」有什麼問題?
- 12. 'typeid'與'typeof'在C++中
- 13. Dim c as MyClass&Dim c as New MyClass
- 14. 與typeof
- 15. 性能問題
- 16. 性能問題
- 17. 性能問題
- 18. 性能問題
- 19. 性能問題
- 20. 性能問題
- 21. 性能問題
- 22. 性能問題
- 23. C中MPI程序的性能問題
- 24. MongoDB C#光標性能問題
- 25. 並行c#線程性能問題
- 26. 問題的結構和性能在C#
- 27. 構造類的性能問題,C++
- 28. C# - 如何嘲笑this.GetType()大會
- 29. 與「新的ReportDocument()」性能問題
- 30. @EJB注入與查找 - 性能問題
當你有沒有實例,只有TYPEOF是可用的,不是嗎? – 2011-03-27 17:51:50