簡體   English   中英

為什么選擇System.Decimal繼承層次結構

[英]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 )。

您顯示的繼承層次結構對應於傳統的繼承概念,因此它不反映ValueTypeDecimal (或任何其他struct )之間的關系。

暫無
暫無

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

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