【问题标题】:What types can be declared as const?哪些类型可以声明为 const?
【发布时间】:2013-12-14 05:13:57
【问题描述】:

在 C# 中,哪些类型可以声明为 const

const int i = 0;
const double d = 0;
const decimal m = 0;
const referenceType = null;

我可以参考一个完整的列表吗?

【问题讨论】:

    标签: c# types constants


    【解决方案1】:

    MSDN 明确指出

    常量表达式是可以在 编译时间。因此,常数的唯一可能值 引用类型为 string 和 null。

    来自 C# 语言规范的第 10.4 节。这些是可以使用的类型。

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

    【讨论】:

    • 是的,这是规范中的第 10.4 节!接受这是正确的!
    【解决方案2】:

    来自 MSDN:

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

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

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

    【讨论】:

    • 我认为文档没有多大意义(规范确实如此)imo。 System.Object 和任何其他引用类型都可以声明为const(除非它们指向 null)。
    【解决方案3】:

    在 C# 的上下文中,常量是一种字段或局部变量 其值是在编译时设置的,并且永远不能在运行时更改 时间。它类似于变量,具有名称、值和 内存位置。但是,它与变量的不同之处在于 在应用程序中只初始化一次的特性。一种 使用关键字“const”声明常量。

    Constants (C# Programming Guide)

    只有 C# 内置类型(不包括 System.Object)可以声明为 const。有关内置类型的列表,请参阅 Built-In Types Table (C# Reference)

    • bool byte sbyte char decimal double float int uint long ulong object 短ushort字符串

    【讨论】:

    • 我认为文档没有多大意义(规范确实如此)imo。 System.Object 和任何其他引用类型都可以声明为const(除非它们指向 null)。
    猜你喜欢
    • 2010-10-01
    • 2018-12-14
    • 1970-01-01
    • 2019-04-01
    • 2014-05-07
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多