C#中的Const方法

时间:2010-09-26 17:51:08

标签: c#

在C ++中,您可以定义一个常量方法,如下所示:

int func_that_does_not_modify_this(int arg) const {}

在函数末尾放置const可以防止您意外修改任何内部属性,并让调用者知道此函数不会修改对象。

C#中有这样的概念吗?

4 个答案:

答案 0 :(得分:51)

不,C#中没有类似的东西。它已经被讨论了很多,但是很难让const以这样的方式工作,它在编译时是可验证的,不能像在C ++中那样被抛弃,并且在没有的情况下仍然相当容易实际使用每个人在设计自己的课程时都必须完全正确。

当然,如果你设计自己的类型是不可变的(比如string),那么它上面的所有实例方法都是有效的const。这并不总是实用的,但在适当的地方使用它是一项重要的技术。

答案 1 :(得分:13)

Code Contract将来应提供此类功能。目前,您可以将方法标记为[Pure],这意味着它没有任何副作用(即不修改任何类成员)。遗憾的是,当前版本的工具不会强制执行此规则,因此使用该属性仅用于文档目的。我很确定在将来的版本中,它将通过静态分析(即在编译时)强制执行,或者至少是文档提示的内容。

相关SO问题:Pure functions in C#

答案 2 :(得分:8)

没有。 C#中没有类似的东西。

const &

正如Jon所指出的那样,你可以明显地实现一个const方法,但除了文档之外,没有办法让调用者知道方法是const。

答案 3 :(得分:1)

C#8.0增加了对C ++样式const方法的支持,但仅支持struct。您可以在方法减速中添加readonly修饰符,以对其中的任何状态进行修改,以生成编译器警告(如果需要,可以将其定义为错误)。 readonly的struct方法仍可以调用非readonly的方法,但是将在struct的副本上调用该方法,以防止对原始数据进行任何更改。

有关更多信息: