Jar*_*Par 30
小澄清.它们实际上是静态只读值而不是常量.这在.Net中有明显的区别,因为常量值由各种编译器内联,因此无法在编译的程序集中跟踪它们的用法.但是,静态只读值不会被复制,而是被引用.这对您的问题很有帮助,因为这意味着可以分析它们的使用.
如果您使用反射器并通过BCL挖掘,您会注意到MinusOne和Zero仅用于VB运行时.它主要用于提供Decimal和Boolean值之间的转换.为什么MinusOne被巧合地用于今天的单独线程(链接)
奇怪的是,如果你看一下Decimal.One值,你会注意到它没有被使用.
至于为什么明确定义它们......我怀疑有一个硬性和快速的原因.有似乎是没有具体表现,只有一点是可以归因于他们的存在便利措施.我的猜测是,在BCL的开发过程中,他们是为了方便而添加的,并且从未删除过.
编辑
const
在@Paleta发表评论之后再多探讨这个问题.C#定义Decimal.One
使用const
修饰符,但它static readonly
在IL级别发出.C#编译器使用了一些技巧来使这个值几乎与a const
(例如内联文字)无法区分.这将以一种识别这一技巧的语言出现(VB.Net认识到这一点,但F#没有).
mih*_*ihi 19
某些.NET语言不支持十进制作为数据类型,在这些情况下编写Decimal.ONE而不是新的Decimal(1)更方便(也更快).
出于同样的原因,Java的BigInteger类也有ZERO和ONE.
归档时间: |
|
查看次数: |
16736 次 |
最近记录: |