为什么选择System.Decimal继承层次结构

时间:2012-02-22 10:59:41

标签: c# resharper

我的印象是所有值类型都继承自System.ValueType,因为我知道Decimal结构,这也是一个值类型,它表示Decimal因此必须是值类型。那么为什么resharper会显示类型层次结构:

enter image description here

或者我在这里误解了什么?

3 个答案:

答案 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 ,我会看到:

enter image description here

所以一切都如你所料。

答案 2 :(得分:1)

在代码中表达的传统意义上的传承意义上没有从<{1}}继承的类型(有System.ValueType,但出于本讨论的目的,没关系)。 System.Enum是一种不打算在代码中使用的特殊类型;通过声明类型是ValueType

来“继承”它
  

虽然struct是值类型的隐式基类,但是你   无法创建直接从ValueType继承的类。代替,   个人编译器提供语言关键字或构造(例如   C#中的ValueType和Visual Basic中的struct)来支持   创造价值类型。

这种类型的“继承”由编译器处理,编译器知道这些“特殊”类型(例如,还有Structure…End Structure)。

您显示的继承层次结构对应于传统的继承概念,因此它不反映System.VoidValueType(或任何其他Decimal)之间的关系。