问题描述
在C#中,为以下类型的数字类型定义了 MinValue 字段:
In C#, MinValue field is defined for numeric types with:
①静态只读十进制修饰符键入:
public static readonly decimal MinValue
② const 修饰符,用于所有其他数字类型:
② const modifier for all other numeric types:
//Integral signed numeric types
public const sbyte MinValue
public const short MinValue
public const int MinValue
public const long MinValue
//Integral unsigned numeric types
public const byte MinValue
public const ushort MinValue
public const uint MinValue
public const ulong MinValue
//Real numeric types
public const float MinValue
public const double MinValue
为什么 const 修改r不用于定义Decimal.MinValue字段?
Why const modifier is not used to define Decimal.MinValue field ?
备注:
①同样的问题也适用于数字类型的 MaxValue 字段。
① Same question applies to numeric types MaxValue field.
②VB,C ++和F#对十进制类型也使用了不同的修饰符,因此该问题不是
② VB, C++ and F# also use different modifiers for decimal type so this question is not specific to C# language.
推荐答案
尽管将十进制 MinValue
字段描述为静态只读
,C#编译器将其视为 const
。
Although MSDN library describes decimal MinValue
field as being static readonly
, C# compiler treats it as const
.
如果 MinValue
字段为只读字段,则以下代码将无法编译,但实际上可以编译。
If MinValue
field was readonly, following code would not compile, but it actually does compile.
const十进制测试= decimal.MinValue-decimal.MinValue;
备注:
①相同的答案适用于十进制类型 MaxValue
字段。
① Same answer applies to decimal type MaxValue
field.
②有关更多详细信息,乔恩·斯凯特(Jon Skeet)在深入了解IL级别的恒定字段实现之间的区别:
② For further details, Jon Skeet's gives here an insight on how constant field implementation at IL level differs between:
- 原始数值类型(整数,浮点和双精度)和
- 非原始数字十进制类型。
这篇关于十进制最小值Decimal.MaxValue:为什么使用静态只读而不使用const修饰符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!