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

时间:2013-01-18 19:51:13

标签: c# methods

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

方法1:

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

方法2:

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

呼叫者:

WriteSpace(4); //1
Response.Write(WriteSpaceReturn(4)); //2

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

(在这两种情况下,您都应删除numSpaces非正面的冗余检查。)

答案 1 :(得分:0)

一个人为你写(第一个)

第二个返回第一个写入的字符串,要求您自己编写。或者,更重要的是,允许您对其执行任何有效的字符串相关操作。

答案 2 :(得分:0)

第一种方法将空格直接写入响应流

第二个创建一个包含空格的字符串。 然后调用者必须将空格写入响应:Response.Write(WriteSpaceReturn(4));

后者是首选,因为它提供了更多的弹性,但功能可以完全替换为:

new String(' ', 4 );

导致

Response.Write(new String(' ', 4 ));

阅读效率更高,更清晰。