Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# Java/C中对同一对象调用多个方法的编码标准#_C#_Java_Coding Style - Fatal编程技术网

C# Java/C中对同一对象调用多个方法的编码标准#

C# Java/C中对同一对象调用多个方法的编码标准#,c#,java,coding-style,C#,Java,Coding Style,这个代码片段 StringBuilder builder = new StringBuilder(); builder.Append("Have a "); builder.Append("nice day!"); 这样写会更好吗 StringBuilder builder = new StringBuilder(); builder.Append("Have a ") .Append("nice day!"); 在C#和Java中,编写它的更好方法是什么?第二个示

这个代码片段

StringBuilder builder = new StringBuilder();
builder.Append("Have a ");
builder.Append("nice day!");
这样写会更好吗

  StringBuilder builder = new StringBuilder();
  builder.Append("Have a ")
         .Append("nice day!");

在C#和Java中,编写它的更好方法是什么?

第二个示例中的模式是“fluent API”/“fluent接口”;坦率地说,严格来说两者都不是更好的——但如果第二种方法存在,不使用它可能会有点低效。在.NET IL术语中,第一种语法在每次迭代中都涉及到额外的
ldloc
pop
,第二种语法避免了这一点,但这很少是非常重要的。两者都可以

就我个人而言,我会为可读性和方便性进行优化,除非您知道它处于性能关键点

实际上,您可以使用:

string s = "Have a " + "nice day!";

编译器(至少在C#中-我不知道java)将在编译时计算(因为它们都是常量)并编译成单个
ldstr
(也会自动插入)。

内部所有这些都归结为内存中的相同内容。但就可编辑性而言,我会选择第一种方法。没有“更好”的方法。API只是有些不同;如果可以在所有
StringBuilder
的API中一致地提供第二个选项,那么第二个选项就很好了(否则,如果只有一些方法允许链接,那么它似乎是任意的)。我通常更喜欢IDE支持的样式,而不是自动样式。所以第一个更好。恐怕编码风格的问题本质上是主观的。主观问题并非如此,请参阅了解详细信息。我喜欢第一种方法,它更容易调试IMO。使用
+
而不是StringBuilder的
append()
方法在堆上创建一个新的字符串对象(至少对于变量字符串),如果使用StringBuilder.@alan.sambol(取决于使用情况),我们希望避免这种情况;例如,在C#中,语句:
strings=name+“:“+count+”-“+comment
实际上是对
string.Concat
的一次调用,因此只会产生一个额外的
string
实例—我们想要的实例。你做得再好不过了。如果我们在一个循环中连接,那么是:
StringBuilder
将是理想的选择。但问题并没有说明这一点。该代码段将在Java中工作。@alan.sambol字符串串联在Java中编译为新的StringBuilder和append序列。