为什么 String.Format 是静态的?

比较

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

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

为什么.Net 设计者选择静态方法而不是实例方法?你怎么看?

请先 登录 后评论

7 个回答

Thomas Owens

我认为是因为它是一个创建者方法(不确定是否有更好的名称)。它所做的就是接受你给它的东西并返回一个单一的字符串对象。它不对现有对象进行操作。如果它是非静态的,则需要一个字符串开头。

请先 登录 后评论
Kibbee

我认为通常使用 String.Format 看起来更好,但是当您已经将字符串存储在要“格式化”的变量中时,我可以看到想要使用非静态函数的意义。

顺便说一句,字符串类的所有函数都不作用于字符串,而是返回一个新的字符串对象,因为字符串是不可变的。

请先 登录 后评论
Jason Bunting

当你有一个保持某种状态的对象时,实例方法是很好的;格式化字符串的过程不会影响您正在操作的字符串(阅读:不修改其状态),它会创建一个新字符串。

使用扩展方法,您现在可以吃蛋糕也可以吃(即,如果它可以帮助您在晚上睡得更好,您可以使用后一种语法)。

请先 登录 后评论
Mat Noguchi

String.Format 至少接受一个字符串并返回一个不同的字符串。它不需要修改格式字符串来返回另一个字符串,所以这样做没什么意义(忽略你的格式)。另一方面,让 String.Format 成为成员函数并没有那么难,除非我认为 C

请先 登录 后评论
Ryan Farley

因为 Format 方法与字符串的当前值无关。不使用字符串的值。它接受一个字符串并返回一个。

请先 登录 后评论
Community

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

请先 登录 后评论
Konrad Rudolph
<块引用>

因为 Format 方法与字符串的当前值无关。

所有字符串方法都是如此,因为 .NET 字符串是不可变的。

<块引用>

如果它是非静态的,则需要一个字符串开头。

确实如此:格式字符串。

我相信这只是 .NET 平台中许多设计缺陷的另一个例子(我并不是说这是火焰;我仍然认为 .NET 框架优于大多数其他框架)。

请先 登录 后评论