我的印象是,所有價值從類型繼承System.ValueType,因爲我知道,Decimal是結構這也是它去說一個值類型十進制因此絕是一個值類型。那麼,爲什麼ReSharper的顯示類型的層次結構,例如:爲什麼System.Decimal繼承層次
還是我在這裏誤解的東西?
我的印象是,所有價值從類型繼承System.ValueType,因爲我知道,Decimal是結構這也是它去說一個值類型十進制因此絕是一個值類型。那麼,爲什麼ReSharper的顯示類型的層次結構,例如:爲什麼System.Decimal繼承層次
還是我在這裏誤解的東西?
如果我告訴(在ReSharper的5.1)十進制在另一個視圖模式(超類型層次)我看到:
所以一切都如你所願。
小數不從IFormattable獲得,它只是工具的IFormattable接口。
實現接口有時被稱爲「繼承」,它看起來幾乎相同。
我更驚訝resharper不顯示其餘的接口。
轉到VS定義(F12)顯示:
public struct Decimal :
IFormattable, IComparable, IConvertible, IDeserializationCallback,
IComparable<decimal>, IEquatable<decimal>
我知道它不是派生出來的,但我的問題是爲什麼ValueType不在那裏? – 2012-02-22 12:40:15
嗯,我認爲@Jon回答了這個問題。 – 2012-02-22 14:05:44
沒有類型,實際上在代碼表示在繼承傳統意義上的從System.ValueType
繼承(有System.Enum
,但爲宗旨這個討論沒關係)。 ValueType
是一種特殊類型,不打算在代碼中使用;你通過聲明一個類型是一個struct
從它「繼承」:
雖然
ValueType
是值類型隱式基類,你 不能創建從ValueType
直接繼承的類。相反,各個編譯器會提供語言關鍵字或構造(例如C#中的struct
和Visual Basic中的Structure…End Structure
),以支持 創建值類型。
這種類型的「繼承」由編譯器處理,編譯器知道這些「特殊」類型(例如,也有System.Void
)。
您顯示的繼承層次對應於傳統的繼承概念,因此它不反映ValueType
和Decimal
(或任何其他struct
)之間的關係。
按照通常的術語來說,值類型的裝箱實例確實繼承自「ValueType」。值類型的奇怪之處在於,在大多數情況下,類型「T」的存儲位置意味着「可以容納對類型爲」T「的堆對象的引用的東西,但是如果」T「從」ValueType「派生出存儲位置'T'的意思是「能容納所有與T相關的數據的東西」。 – supercat 2013-08-16 21:16:03
這就是答案 - 我已經啓用了「隱藏庫元素」按鈕 – 2012-02-22 12:39:29