我的印象是所有值类型都继承自System.ValueType,因为我知道Decimal是结构,这也是一个值类型,它表示Decimal因此必须是值类型。那么为什么resharper会显示类型层次结构:
或者我在这里误解了什么?
答案 0 :(得分:6)
Decimal不会从IFormattable 派生,它只是实现 IFormattable接口。
实现接口有时被称为“继承”,它看起来几乎相同。
我更感到惊讶的是,resharper没有显示其余的界面 转到VS中的定义(F12)显示:
public struct Decimal :
IFormattable, IComparable, IConvertible, IDeserializationCallback,
IComparable<decimal>, IEquatable<decimal>
答案 1 :(得分:2)
如果我在另一个视图模式(超类型层次结构)中显示(在ReSharper 5.1中) Decimal ,我会看到:
所以一切都如你所料。
答案 2 :(得分:1)
在代码中表达的传统意义上的传承意义上没有从<{1}}继承的类型(有System.ValueType
,但出于本讨论的目的,没关系)。 System.Enum
是一种不打算在代码中使用的特殊类型;通过声明类型是ValueType
:
虽然
struct
是值类型的隐式基类,但是你 无法创建直接从ValueType
继承的类。代替, 个人编译器提供语言关键字或构造(例如 C#中的ValueType
和Visual Basic中的struct
)来支持 创造价值类型。
这种类型的“继承”由编译器处理,编译器知道这些“特殊”类型(例如,还有Structure…End Structure
)。
您显示的继承层次结构对应于传统的继承概念,因此它不反映System.Void
和ValueType
(或任何其他Decimal
)之间的关系。