C#中的Const方法

mpe*_*pen 48 c#

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

int func_that_does_not_modify_this(int arg) const {}
Run Code Online (Sandbox Code Playgroud)

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

C#中有这样的概念吗?

Jon*_*eet 52

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

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

  • @Artyom:据我所知,除了只读结构之外,还可以提供一些帮助。 (4认同)
  • 乔恩,有这方面的消息吗? (3认同)

All*_*nek 13

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

相关的SO问题:C#中的纯函数


All*_*nek 9

C# 8.0 添加了对 C++ 风格const方法的支持,但仅限于structs. 您可以readonly向方法减速添加修饰符,以进行任何修改以在其中声明编译器警告(如果您愿意,可以将其定义为错误)。结构readonly体方法仍可以调用非readonly方法,但该方法将在 的副本上调用struct,以防止对原始数据进行任何更改。

\n

了解更多信息:

\n\n


Bri*_*sen 8

没有.在C#中没有类似的东西.

也没有const &.

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

  • 那么“in”关键字呢?它不是与“const ref”相当吗? (2认同)