与C ++不同,C#中没有任何const成员方法和const参数。是什么原因?
答案 0 :(得分:27)
首先,我们并不要求不实现功能。功能非常昂贵;必须有 实现功能的理由,而不是不实现功能的理由。
其次,C#不是C ++或C的克隆。仅仅因为某个功能在某种其他语言中并不是将其放在C#中的理由。
第三,“const”在C和C ++中被彻底打破。 “const”不保证你可以真正依赖。如果你是一个采用const引用的方法的调用者,那么你无法保证该方法遵循constness;该方法有许多方法可以改变const引用。如果您是const引用的使用者,那么您无法保证基础对象实际上不会随意变异。由于合同未在呼叫者或被呼叫方执行,因此它远远弱于我们希望在类型系统中进行的任何其他保证。我们不想复制这样一个破碎的系统。
第四,将constness放在CLR类型系统中意味着每个语言都必须使用相同的 constness实现;因为不同的语言对于const具有不同的含义,这将使更难将更多语言带入CLR,而不是更容易。
有很多理由没有做这个极其昂贵的功能,而且很少有理由这样做。昂贵,不合理的功能无法实现。
答案 1 :(得分:8)
C#没有它,因为.NET没有。 .NET不是因为CLR开发团队认为不值得付出努力。
你可以在MS博客上阅读,比如Raymond Chen的“The Old New Thing”或Eric Lippert的“编码中的神话般的冒险”,how Microsoft prioritizes features。
答案 2 :(得分:2)
Stan Lippman有一篇不错的文章here。