[英]C# performance question: typeof(MyClass) vs. this.GetType()
在log4net配置手冊的第一個示例中,作者使用typeof(MyApp)
來獲取包含類MyApp
的類型。 有沒有理由不使用this.GetType()
,性能方面? 因為在我看來,當復制到另一個類時,這個this.GetType()
比潛在的復制粘貼錯誤更安全。
typeof(Foo)
是一種靜態類型查找; 本質上它發生在編譯時,所以你只得到明確命名的類型。
GetType()
是動態類型查找; 它是一個在運行時被調用的虛方法,即使你使用多態也會給你確切的類型。 所以它在理論上“慢”,但是它給你的東西是你無法從typeof(T)
。 如果您的設計需要一個或另一個,速度不會成為一個因素。
除了性能問題之外,在提供的示例中, GetType
甚至不是一個選項,因為它是一個實例方法; 它不能從字段初始化程序中調用。 在任何情況下,由於意圖是從靜態“上下文”初始化靜態字段,邏輯上this
引用不可用 - 因此沿着靜態構造函數路由下去也無助於允許GetType
。
// Can't use GetType() - the this reference is not available.
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.