在c#中,定义纯方法的规则是什么?

Dan*_*ong 3 c# xna c#-4.0

这个简单的扩展方法是一个矩形,例如纯?

如果没有,为什么不呢?如果是,为什么?

    [Pure]
    public static Rectangle InflateCopy(this Rectangle r, float horizontal, float vertical)
    {
        r.X -= (int)horizontalAmount;
        r.Y -= (int)verticalAmount;
        r.Width += (int)horizontalAmount*2;
        r.Height += (int)verticalAmount*2;
        return r;
    }
Run Code Online (Sandbox Code Playgroud)

ang*_*son 6

根据维基百科 - 纯功能:

在计算机编程中,如果以下关于函数的语句都保持,则函数可以被认为是纯函数:

  1. 在给定相同参数值的情况下,该函数始终评估相同的结果值.功能结果值不能依赖于程序执行过程中或程序执行不同时可能发生的任何隐藏信息或状态,也不依赖于I/O设备的任何外部输入(通常见下文).
  2. 对结果的评估不会导致任何语义上可观察到的副作用或输出,例如可变对象的突变或输出到I/O设备(通常见下文).

PureAttributeMicrosoft文档声明:

表示类型或方法是纯的,也就是说,它不会进行任何可见的状态更改.

微软对纯方法的描述有点短,缺少一个关键部分,纯方法应该总是在给定相同输入参数的情况下评估相同的结果.

那么你的方法是纯粹的吗?

  1. 如果为它提供相同的矩形和相同的其他参数值,它将始终生成相同的输出,它不使用通过参数提供给它的任何其他变量或信息.
  2. 假设您的使用RectangleSystem.Drawing.Rectangle,这是一个struct,那么即使该方法似乎正在更改矩形,它只是更改它自己的私有副本,因此您将看不到任何可观察到的副作用方法.
  3. 它不使用或改变状态(状态被认为是参数值外部的一切).

所以是的,这种方法很纯粹.

  • _“假设您使用的 Rectangle 是 System.Drawing.Rectangle”_ - OP 正在使用 XNA,因此它是“Microsoft.Xna.Framework.Rectangle”。无论如何,它是一个结构;) (2认同)