2012-02-22 90 views

回答

2

如果我告訴(在ReSharper的5.1)十進制在另一個視圖模式(超類型層次)我看到:

enter image description here

所以一切都如你所願。

+0

這就是答案 - 我已經啓用了「隱藏庫元素」按鈕 – 2012-02-22 12:39:29

6

小數不從IFormattable獲得,它只是工具的IFormattable接口。

實現接口有時被稱爲「繼承」,它看起來幾乎相同。

我更驚訝resharper不顯示其餘的接口。
轉到VS定義(F12)顯示:

public struct Decimal : 
     IFormattable, IComparable, IConvertible, IDeserializationCallback, 
     IComparable<decimal>, IEquatable<decimal> 
+0

我知道它不是派生出來的,但我的問題是爲什麼ValueType不在那裏? – 2012-02-22 12:40:15

+0

嗯,我認爲@Jon回答了這個問題。 – 2012-02-22 14:05:44

1

沒有類型,實際上在代碼表示在繼承傳統意義上的從System.ValueType繼承(有System.Enum,但爲宗旨這個討論沒關係)。 ValueType是一種特殊類型,不打算在代碼中使用;你通過聲明一個類型是一個struct從它「繼承」:

雖然ValueType是值類型隱式基類,你 不能創建從ValueType直接繼承的類。相反,各個編譯器會提供語言關鍵字或構造(例如C#中的 struct和Visual Basic中的Structure…End Structure),以支持 創建值類型。

這種類型的「繼承」由編譯器處理,編譯器知道這些「特殊」類型(例如,也有System.Void)。

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

+0

按照通常的術語來說,值類型的裝箱實例確實繼承自「ValueType」。值類型的奇怪之處在於,在大多數情況下,類型「T」的存儲位置意味着「可以容納對類型爲」T「的堆對象的引用的東西,但是如果」T「從」ValueType「派生出存儲位置'T'的意思是「能容納所有與T相關的數據的東西」。 – supercat 2013-08-16 21:16:03