正如 Jon 已经涵盖的(当然) const 正确性并不像看起来那么简单。C++ 以一种方式做到这一点。D 以另一种方式(可以说更正确/有用)。C# 与它调情,但没有做任何更大胆的事情,正如您所发现的(而且可能永远不会很好,正如 Jon 再次很好地介绍的那样)。
也就是说,我相信 Jon 的许多“理论原因”在 D 的模型中得到了解决。
在 D (2.0) 中, const 的工作方式与 C++ 非常相似,只是它是完全可传递的(因此应用于指针的 const 将应用于指向的对象、该对象的任何成员、该对象具有的任何指针、它们指向的对象等) - 但很明显,这仅适用于您声明 const 的变量(因此,如果您已经有一个非常量对象并且您将 const 指针指向它,那么非常量变量仍然可以改变状态)。
D 引入了另一个关键字——不变量——它适用于对象本身。这意味着一旦初始化,任何东西都无法改变状态。
这种安排的美妙之处在于 const 方法可以接受 const 和不变对象。由于不变对象是函数世界的面包和黄油,并且 const 方法可以在函数意义上被标记为“纯” - 即使它可以与可变对象一起使用。
回到正轨 - 我认为我们现在(后半部分顽皮)才了解如何最好地使用 const (和不变量)。.Net 最初是在事情更加模糊的时候定义的,所以没有做出太多承诺——现在改造已经太晚了。
不过,我希望看到 D 的端口在 .Net VM 上运行 :-)