为什么使用 System.Decimal 继承层次结构

发布于 2025-01-07 14:25:13 字数 470 浏览 3 评论 0原文

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

在此处输入图像描述

还是我在这里误解了某些内容?

I was under the impression that all value types inherit from System.ValueType, and because I know that Decimal is a struct which is also a value type it goes to say that Decimal hence must be a value type. So why does resharper show the type hierarchy as such:

enter image description here

or am I misunderstanding something here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岁月无声 2025-01-14 14:25:13

Decimal 并不是从 IFormattable 派生的,它只是实现了 IFormattable 接口。

实现接口有时被称为“继承”,它看起来几乎是一样的。

更令我惊讶的是 resharper 没有显示其余的接口。
VS 中的转到定义 (F12) 显示:

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

Decimal does not derive from IFormattable, it merely implements the IFormattable interface.

Implementing an interface is sometimes called 'inheriting', and it looks almost the same.

I'm more surprised resharper does not show the rest of the interfaces.
Go To definition (F12) in VS shows:

 public struct Decimal : 
       IFormattable, IComparable, IConvertible, IDeserializationCallback, 
       IComparable<decimal>, IEquatable<decimal>
单身狗的梦 2025-01-14 14:25:13

如果我在另一种视图模式(超类型层次结构)中显示(在 ReSharper 5.1 中)十进制,我会看到:

在此处输入图像描述

所以一切都如您所期望的那样。

If I show (in ReSharper 5.1) Decimal in another view mode (Supertypes Hierarchy) I see that:

enter image description here

So all is as you would expect.

空城缀染半城烟沙 2025-01-14 14:25:13

在代码中表达的传统继承意义上,没有任何类型实际上继承System.ValueType(有System.Enum,但是就本次讨论而言,这并不重要)。 ValueType 是一种特殊类型,不适合在代码中使用;您可以通过声明类型是 struct 来“继承”它:

虽然 ValueType 是值类型的隐式基类,但您
无法创建直接从 ValueType 继承的类。反而,
各个编译器提供语言关键字或构造(例如
C# 中的 struct 和 Visual Basic 中的 Structure…End Structure)以支持
值类型的创建。

这种类型的“继承”由编译器处理,编译器了解这些“特殊”类型(例如,还有 System.Void)。

您显示的继承层次结构对应于传统的继承概念,因此它不反映 ValueTypeDecimal (或任何其他 struct )。

There is no type that actually inherits from System.ValueType in the traditional sense of inheritance as expressed in code (there is System.Enum, but for the purposes of this discussion it doesn't matter). ValueType is a special type not intended to be used in code; you "inherit" from it by declaring that a type is a struct:

Although ValueType is the implicit base class for value types, you
cannot create a class that inherits from ValueType directly. Instead,
individual compilers provide a language keyword or construct (such as
struct in C# and Structure…End Structure in Visual Basic) to support
the creation of value types.

This type of "inheritance" is handled by the compiler, which has knowledge of these "special" types (for example, there's also System.Void).

The inheritance hierarchy you show corresponds to the traditional concept of inheritance, so it does not reflect the relationship between ValueType and Decimal (or any other struct).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文