C# - 这两种方法之间的确切区别是什么?

use*_*548 -3 c# methods

不是一个家庭作业问题.

如果我要描述以下两种方法之间的确切差异以及它们在调用者中的用法,我该怎么做?

方法1:

public void WriteSpace(int numSpaces) {
        if (numSpaces <= 0) return;
        for (var x = 0; x < numSpaces; x++) {
            Response.Write(" ");
        }
    }
Run Code Online (Sandbox Code Playgroud)

方法2:

public String WriteSpaceReturn(int numSpaces) {
        var space = "";
        if (numSpaces <= 0) return space;
        for (var x = 0; x < numSpaces; x++) {
            space += " ";
        }
        return space;
    }
Run Code Online (Sandbox Code Playgroud)

呼叫者:

WriteSpace(4); //1
Response.Write(WriteSpaceReturn(4)); //2
Run Code Online (Sandbox Code Playgroud)

两者的最终结果是相同的.所以我明白第一种方法不会给调用者返回一个值而第二种方法会返回一个值,但除此之外,我还能如何描述这些?

第一种和第二种方法之间的原子性是否存在差异?范围?阻止?是否有一个名称,第一种方法在方法中写入输出,而第二种方法让调用者这样做?如果这些数据写入了大量数据,那么一个人会更喜欢另一个吗?我怀疑,因为第一个是Response.Write为每个角色打电话,它会慢一些吗?

Jon*_*eet 5

性能方面的主要差异:代码的第二个版本在循环中使用字符串连接,这是低效的.我希望Response.Write比那更有效率.

封装方面的主要区别:第二种形式是纯方法 - 它没有副作用.这样可以更容易地进行单独测试,在这种特殊情况下,可以更容易地在多种情况下使用.

这并不是说第二个版本更好的纯粹,必然 - 这取决于上下文.

(在这两种情况下,您应该删除冗余检查numSpaces是否为非正数.)