簡體   English   中英

為什么System.Exception陰影GetType()

[英]Why does System.Exception shadow GetType()

在嘗試比較兩個dll進行API更改時,一位同事注意到某些類有兩個GetType()方法。

經過深入檢查,結果發現System.Exception陰影GetType():

// this method is required so Object.GetType is not made virtual by the compiler
public new Type GetType() 
{
  return base.GetType(); 
}

我看到System.Exception實現了_Exception,但是我沒有看到為什么必須顯式地遮蔽GetType的原因,因為它不會是虛擬的。

那么為什么System.Exception陰影GetType()?

我不確定它是否與尖叫所提到的COM有任何關系,但它肯定與不使Object.GetType()虛擬有關。

尖叫的答案中的第二個鏈接提到了它,但是對另一個問題的回答使得它更清楚:

CLR要求實現接口方法的所有方法都必須是虛擬的( Ecma 335 Partition II Section 12.1)。

  • 如果基類中的方法不是虛擬的,而是在同一個程序集中,那么偷偷摸摸的編譯器實際上使它成為虛擬和最終的

如果System.Exception沒有影響GetType(),則Object的GetType()實現將由編譯器自動轉換為虛方法。

看看這里 ,並在評論這里的“長”的答案。

簡而言之, System.Exception實現了System.Runtime.InteropServices._Exception接口,該接口也具有GetType-Method,因此必須new實現GetType-Method。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM