-3

不是一个家庭作业问题。

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

方法一:

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

方法二:

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为每个角色打电话,它会更慢吗?

4

3 回答 3

5

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

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

这并不是说第二个版本适合纯粹,这取决于上下文。

(在这两种情况下,您都应该删除多余的检查numSpaces是否为非肯定。)

于 2013-01-18T19:54:40.477 回答
0

一个为你写的(第一个)

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

于 2013-01-18T19:54:19.273 回答
0

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

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

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

new String(' ', 4 );

导致

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

阅读效率更高,方式更清晰。

于 2013-01-18T19:54:21.913 回答