为什么String.Format是静态的?

40

比较

String.Format("Hello {0}", "World");

"Hello {0}".Format("World");

为什么 .Net 设计者选择使用静态方法而不是实例方法?您的看法是什么?
22个回答

-1

String.Format必须是一个静态方法,因为字符串是不可变的。将其作为实例方法会意味着您可以使用它来“格式化”或修改现有字符串的值。这是不可能的,而使其成为返回新字符串的实例方法也没有意义。因此,它是一个静态方法。


9
格式化和替换或子字符串有何不同之处?实际上没有修改任何字符串,而是返回新的字符串。格式化也可以跟随这种方式。 - Greg
真的,但可以换个角度看待:如果Format是一个实例方法,你需要先声明字符串,再在其上调用Format。这将永远是一个两步骤的过程。例如:1)string strTemp;2)strTemp.Format("{0}","Hello World"); 使其成为静态方法更加简洁。 - user2189331
从语义上讲,“Replace”和“Substring”作为实例方法是有意义的。格式可以是任意的,但如果使用静态格式,使用起来会更清晰。 - user2189331

-2

.NET 字符串是不可变的

因此,拥有一个实例方法完全没有意义。

String foo = new String();

foo.Format("test {0}",1); // Makes it look like foo should be modified by the Format method. 

string newFoo = String.Format(foo, 1); // Indicates that a new string will be returned, and foo will be unaltered.

这与其他作为实例方法并返回新字符串的String操作不一致。 Insert, Normalize, PadLeft等都按照描述的方式正常工作。如果Format是静态的,因为字符串是不可变的,那么所有这些方法也应该是静态的,但它们并不是。 - Alex Lowe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接