哪些类型可以声明为常量?

3
在C#中,哪些类型可以声明为const ?
const int i = 0;
const double d = 0;
const decimal m = 0;
const referenceType = null;

有没有一份全面的清单可以供我参考?
3个回答

7

根据MSDN的明确说明:

常量表达式是一种可以在编译时完全计算的表达式。因此,引用类型的常量唯一可能的值是字符串和 null。

从C#语言规范的第10.4节得知以下类型可以使用:

在常量声明中指定的类型必须是sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、枚举类型或引用类型。每个常量表达式必须产生目标类型的值或可通过隐式转换转换为目标类型的类型的值。


是的,那是规范中的第10.4节!接受此为正确性! - nawfal

2

来自MSDN:

常量是在编译时已知且在程序生命周期内不会改变的不可变值。常量使用const修饰符声明。只有C#内置类型(不包括System.Object)可以声明为常量。有关内置类型的列表,请参见内置类型表(C#参考)。用户定义的类型,包括类、结构和数组,不能是常量。使用readonly修饰符创建一个在运行时初始化一次(例如在构造函数中)并且之后无法更改的类、结构或数组。

C#不支持常量方法、属性或事件。

完整链接:http://msdn.microsoft.com/en-us/library/ms173119.aspx


我认为文档不太合理(规范是)。System.Object和任何其他引用类型都可以声明为const(除非它们指向null)。 - nawfal

0
在C#的上下文中,常量是一种字段或局部变量类型,其值在编译时设置,并且在运行时永远无法更改。它类似于变量,具有名称、值和内存位置。但是,它与变量不同之处在于它只能在应用程序中初始化一次。使用关键字“const”声明常量。
仅C#内置类型(System.Object除外)可以声明为常量。有关内置类型的列表,请参见Built-In Types Table (C# Reference)链接。
  • bool byte sbyte char decimal double float int uint long ulong object short ushort string
Constants (C# Programming Guide)

我认为文档不太合理(规范是)。System.Object和任何其他引用类型都可以声明为const(除非它们指向null)。 - nawfal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接