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

C# 这两种方法的确切区别是什么?,c#,methods,C#,Methods,这不是一个家庭作业问题 如果我要描述以下两种方法之间的确切区别以及它们在调用者中的使用,我会怎么做 方法1: public void WriteSpace(int numSpaces) { if (numSpaces <= 0) return; for (var x = 0; x < numSpaces; x++) { Response.Write(" "); } } 两者的最终结果是相同的。因此,我很

这不是一个家庭作业问题

如果我要描述以下两种方法之间的确切区别以及它们在调用者中的使用,我会怎么做

方法1:

public void WriteSpace(int numSpaces) {
        if (numSpaces <= 0) return;
        for (var x = 0; x < numSpaces; x++) {
            Response.Write(" ");
        }
    }
两者的最终结果是相同的。因此,我很明显地意识到第一个方法不会向调用者返回值,而第二个方法会返回值,但除此之外,我该如何描述这些呢


第一种和第二种方法在原子性上有区别吗?范围舞台调度?第一个方法在方法内部写入输出,而第二个方法允许调用方这样做,这一事实是否有一个名称?如果他们写了大量的数据,一个会比另一个好吗?我怀疑因为第一个正在调用
响应。为每个字符编写
,速度会慢一些?

一个为您编写(第一个)


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

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

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

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

new String(' ', 4 );
导致

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

效率更高,阅读更清晰。

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


封装方面的主要区别:第二种形式是一种纯方法——它没有副作用。这使得隔离测试更容易,在这种特殊情况下,更容易在多种情况下使用

当然,这并不是说第二个版本更纯粹——这取决于上下文


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

第一种检查有副作用。(即写入流)仅供参考:您可以这样做:
新字符串(“”,10)
@asawyer,您能澄清一下吗?@user1991548 Skeet先生(像往常一样)@Kevin,输出被包装在一个预标记中,否则您是正确的。需要单引号,字符串构造函数需要字符。@user1991548 Right!编辑Madethak你,正是我要找的。认可的。
new String(' ', 4 );
Response.Write(new String(' ', 4 ));