[英]Why System.Decimal inheritance hierarchy
我的印象是所有值類型都繼承自System.ValueType ,因為我知道Decimal是一個結構 ,它也是一個值類型,它說Decimal因此必須是一個值類型 。 那么為什么resharper會顯示類型層次結構:
或者我在這里誤解了什么?
Decimal不是從IFormattable 派生的 ,它只是實現了IFormattable接口。
實現接口有時被稱為“繼承”,它看起來幾乎相同。
我更驚訝resharper沒有顯示其余的接口。
轉到VS中的定義(F12)顯示:
public struct Decimal :
IFormattable, IComparable, IConvertible, IDeserializationCallback,
IComparable<decimal>, IEquatable<decimal>
如果我在另一個視圖模式( 超類型層次結構 )中顯示(在ReSharper 5.1中) 十進制 ,我看到:
所有這一切都如你所料。
在代碼中表示的傳統意義上的繼承中沒有實際繼承 System.ValueType
類型(有System.Enum
,但出於本討論的目的,它並不重要)。 ValueType
是一種不打算在代碼中使用的特殊類型; 你通過聲明一個類型是一個struct
“繼承”它:
盡管
ValueType
是值類型的隱式基類,但您無法創建直接從ValueType
繼承的類。 相反,單個編譯器提供語言關鍵字或構造(例如C#中的struct
和Visual Basic中的Structure…End Structure
)以支持值類型的創建。
這種類型的“繼承”由編譯器處理,編譯器知道這些“特殊”類型(例如,還有System.Void
)。
您顯示的繼承層次結構對應於傳統的繼承概念,因此它不反映ValueType
和Decimal
(或任何其他struct
)之間的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.