Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中,定义纯方法的规则是什么?_C#_C# 4.0_Xna - Fatal编程技术网

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

在c#中,定义纯方法的规则是什么?,c#,c#-4.0,xna,C#,C# 4.0,Xna,例如,矩形的这种简单扩展方法是纯的吗 若否,原因为何? 如果是,为什么 [Pure] public static Rectangle InflateCopy(this Rectangle r, float horizontal, float vertical) { r.X -= (int)horizontalAmount; r.Y -= (int)verticalAmount; r.Width += (int)horizon

例如,矩形的这种简单扩展方法是纯的吗

若否,原因为何? 如果是,为什么

    [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;
    }
根据:

在计算机编程中,如果以下两种关于函数的陈述都成立,则函数可被视为纯函数:

  • 给定相同的参数值,该函数始终计算相同的结果值。函数结果值不能依赖于任何隐藏信息或状态,这些信息或状态可能在程序执行过程中或程序的不同执行之间发生变化,也不能依赖于来自I/O设备的任何外部输入(通常见下文)
  • 对结果的评估不会导致任何语义上可观察的副作用或输出,例如可变对象的突变或I/O设备的输出(通常见下文)
  • 缔约国指出:

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

    Microsofts对纯方法的描述有些简短,缺少一个关键部分,即纯方法在给定相同输入参数的情况下应始终计算相同的结果

    那么你的方法是纯的吗

  • 如果为它提供相同的矩形和相同的其他参数值,它将始终生成相同的输出,它不使用任何其他变量或信息,而不是通过参数提供给它的内容
  • 假设您使用的
    Rectangle
    是一个
    struct
    ,那么即使该方法似乎在更改矩形,它也只是更改它自己的私有副本,因此您不会看到该方法的任何明显副作用
  • 它不使用或更改状态(状态被视为参数值之外的所有内容)
  • 是的,这个方法是纯的。

    “假设您使用的矩形是System.Drawing.Rectangle”-OP使用的是XNA,所以它是Microsoft.XNA.Framework.Rectangle。无论如何,它是一个结构;)