gpt4 book ai didi

c# - .Net 中 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么

转载 作者:IT王子 更新时间:2023-10-29 03:44:11 28 4
gpt4 key购买 nike

简单的问题 - 为什么 Decimal 类型定义这些常量?何必呢?

我正在寻找一个原因,为什么这是由语言定义的,而不是可能的用途或对编译器的影响。为什么首先把它放在那里?编译器可以像 Decimal.Zero 一样轻松地内联 0m,因此我不会将其作为编译器快捷方式购买。

最佳答案

小澄清。它们实际上是静态只读值而不是常量。这在 .Net 中有明显的区别,因为常量值被各种编译器内联,因此不可能在编译的程序集中跟踪它们的使用情况。然而,静态只读值不会被复制,而是被引用。这对您的问题是有利的,因为这意味着可以分析它们的使用。

如果您使用反射器并深入研究 BCL,您会注意到 MinusOne 和 Zero 仅在 VB 运行时中使用。它的存在主要是为了服务于 Decimal 和 Boolean 值之间的转换。为什么使用 MinusOne 恰好在今天出现在一个单独的线程中 (link)

奇怪的是,如果您查看 Decimal.One 值,您会发现它没有用到任何地方。

至于为什么要明确定义它们……我怀疑是否有明确的理由。 似乎没有特定的性能,只有一点可以归因于它们存在的便利措施。我的猜测是他们在 BCL 的开发过程中为方便起见被某人添加了并且从未被删除。

编辑

在@Paleta 发表评论后,深入研究了 const 问题。 Decimal.One 的 C# 定义使用 const 修饰符,但它在 IL 级别作为 static readonly 发出。 C# 编译器使用一些技巧使该值与 const(例如内联文字)几乎没有区别。这将以识别此技巧的语言显示(VB.Net 识别此但 F# 不识别)。

关于c# - .Net 中 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/745591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com