c++/c# 中的纯方法 类

Pure methods in c++/c# classes

所以,我相信我了解纯函数。类似于 abs 或 sqrt 的东西,其中输出取决于输入并且没有副作用。但是我对它如何与方法一起工作感到困惑。

如果我们将方法视为具有隐式 this 参数的函数,那么我会假设如下所示的方法确实是纯方法。

class Foo
{
    int x;

    [Pure] public int Bar() { return x * 2; }
}

函数是纯函数的假设是否正确?如果读取的变量是 readonly/const 会有什么不同吗?

在以下情况下,函数被认为是纯函数:

The function always evaluates the same result value given the same argument value(s). The function result value cannot depend on any hidden information or state that may change while program execution proceeds or between different executions of the program...

From Wikipedia

Bar 不是纯的,因为它取决于变量 x。所以如果x的值改变,Bar()的结果在不同的场合会有所不同。

想象一下这样的事情:

var obj = new Foo();
obj.x = 1;
obj.Bar(); // Returns 2.
obj.x = 5;
obj.Bar(); // Returns 10.

然而,如果 x 是 constant/readonly,它仍然是纯的,因为 Bar() 的结果永远不会改变。