我一直想知道为什么 C# 不支持const
类或方法级别。我知道 Jon Skeet 长期以来一直希望支持不变性,并且我认为使用函数 const 的 C++ 语法可以帮助实现这一点。通过在类级别添加 const 关键字,我们将获得完全支持。
现在,我的问题是,C# 团队没有开发这种支持的原因是什么?
我想一切都可以通过编译时检查或通过属性来创建,而无需更改 CLR。我不介意代码能够通过反射覆盖 const 行为。
想象一下:
const class NumberContainer
{
public int Number { get; }
}
.. 这样的类只能在构造时填充,所以我们需要一个构造函数来接收一个 int。
另一个例子是方法级别的 const :
public int AddNumbers(NumberContainer n1, NumberContainer n2) const
{
return n1.Number + n2.Number;
}
常量级方法不应该能够改变它们自己的类或传递给它们的引用类型实例中的状态。此外,const 级函数只能在其范围内调用其他 const 级函数。
我不太确定 lambda 和委托是否会让一切变得太难(或不可能)实现,但我相信在语言和编译器设计方面有更多经验的人可以告诉我。
正如史蒂夫 B 在评论中指出的那样, 的存在readonly
使事情变得更加复杂,因为 const 和readonly
during 接近相同runtime
,但是readonly
在编译时无法确定值。我想我们可以拥有const
和readonly
水平,但这可能太混乱了?
那么,不执行此操作的原因是什么?可用性问题(新用户通常很难理解 C++ 中的常量)、语言设计问题(无法完成)或简单的优先级问题(不变性嗡嗡声的时代已经结束)......?