为什么C#和const参数中没有const member方法? 不同于C++,C语言中没有任何const成员方法和const参数。原因是什么?C#没有,因为.NET没有。NET没有这样做,因为CLR开发团队认为这样做不值得

为什么C#和const参数中没有const member方法? 不同于C++,C语言中没有任何const成员方法和const参数。原因是什么?C#没有,因为.NET没有。NET没有这样做,因为CLR开发团队认为这样做不值得,c#,.net,C#,.net,您可以在微软的博客上阅读,如Raymond Chen的“新旧事物”或Eric Lippert的“精彩的编码冒险”。首先,我们不需要提供不实现功能的理由。功能极其昂贵;实施一项功能必须有正当理由,而不是不实施一项功能的正当理由 第二,C++不是C++或C的克隆,只是因为某个特征在其他语言中并不是把它放在C中的原因。 第三,“Cst”在C和C++中是深深的,悲剧性的。“const”并不能保证你能真正依赖它。如果您是采用常量引用的方法的调用方,那么您无法保证该方法尊重常量;该方法有多种方法可以改变常量

您可以在微软的博客上阅读,如Raymond Chen的“新旧事物”或Eric Lippert的“精彩的编码冒险”。

首先,我们不需要提供不实现功能的理由。功能极其昂贵;实施一项功能必须有正当理由,而不是不实施一项功能的正当理由

第二,C++不是C++或C的克隆,只是因为某个特征在其他语言中并不是把它放在C中的原因。 <>第三,“Cst”在C和C++中是深深的,悲剧性的。“const”并不能保证你能真正依赖它。如果您是采用常量引用的方法的调用方,那么您无法保证该方法尊重常量;该方法有多种方法可以改变常量引用。如果您是常量引用的使用者,那么您无法保证底层对象实际上不会任意变化。由于该契约在调用方或被调用方都没有强制执行,因此它远远弱于我们希望在类型系统中做出的任何其他保证。我们不想复制这样一个破碎的系统

第四,将constness放入CLR类型系统意味着每种语言都必须使用相同的constness实现;由于不同的语言对constness有不同的含义,这将使将更多的语言引入CLR变得更加困难,而不是更容易


不使用这个极其昂贵的特性有很多原因,但很少有理由这样做。昂贵、不合理的功能无法实现。

请看这些重复的问题:
const
reference的消费者不能期望referent不会在其他地方被修改,这是对的
const(作为指针和引用的限定符)是关于共享对象的只读视图,而不是使对象不可变。但我不同意这是无用的。如果函数接受const引用(或指向const的指针),那么最好不要修改引用的对象,除了“代码>可变的修饰符允许的,因为我可能已经通过了一个真正的常量对象,它存储在只读内存中。(继续)C++ <代码> conconsCAST (除非函数可以保证对象不是代码> const <代码>,否则,在定义点上,该函数可以保证对象不为代码> const <代码>,这可以有效地限制其使用到私有内部帮助函数。对于C++中的公共API,尝试修改通过<代码> const 引用的对象。(或指针)“违反标准,调用未定义的行为。”本:我没有说C++中的const是无用的。它非常有用。我一直使用它。我说它不可靠,误导和危险。有很多东西是不可靠的,误导的和危险的,仍然在使用。这不是手头的问题。H的问题。是“C语言是否应该复制这种不可靠、误导和危险的特性?”答案是“不”因为实现一个有问题的设计的好处并不能证明这样做的成本是巨大的。Const在C/C++中没有被破坏,它也没有误导。它保证了与其他任何类型的信息完全一样。C和C++的输入类型很弱。类型信息在那里从来没有保证。它仍然是优秀的工具。g错误,你说的是“吸和吹”在功能验证方面的语义。如果一个功能被认为是有用的,那么质疑为什么不包括它是完全正确的。更恰当的总结应该是说该功能的实现成本大于其好处,而不是将该问题视为无效原则。