cdh*_*wie 41

因为值类型构造函数可能会执行任何操作 - 例如,根据一天中的时间切换逻辑.常量值类型在理智上是有意义的,但由于构造函数可以灵活地做任何他们喜欢的事情,它在实践中根本不能用于自定义值类型.(请记住,常量是在编译时计算的,这意味着你的构造函数必须在编译时运行.)

  • 我想我正在寻找相当于C++的聚合或POD结构:http://en.wikipedia.org/wiki/C%2B%2B_classes只是一种不同的值类型或数据组.那好吧. (3认同)
  • @cdhowie:问题不像语义那样是性能问题,因为`const`值可以用于静态只读字段不能的情况(例如作为默认参数值).它们也被"编入"编译代码,在某些情况下这是一件坏事,但在其他情况下可能会有用. (3认同)
  • @Lazlo:即使如此,编译器也必须在编译时调用它.但从技术上讲,编译器不应该运行您的代码. (2认同)

vcs*_*nes 21

C#中的Const意味着它可以在编译时确定,这就是为什么只有非常原始的类型,例如intstring可以是const.

如果您来自C背景,readonly关键字可能更适合您.

  • “...这就是为什么只有非常原始的类型(例如 int 和 string)才可以是 const。” 我不同意,C++ 也不同意(自 C++11 起)。我不明白为什么我们不能在 C# 中使用 C++ constexpr 之类的东西。 (3认同)
  • 对于具有C/C++背景的程序员来说,这是真正的答案. (2认同)