为什么C#和const参数中没有const成员方法?

时间:2010-11-11 00:38:23

标签: c# .net

与C ++不同,C#中没有任何const成员方法和const参数。是什么原因?

3 个答案:

答案 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