为什么String类没有无参数构造函数?

bur*_*1ce 13 .net c# string clr default-constructor

intobject有一个无参数的构造函数.为什么不string呢?

Pat*_*man 14

因为没有必要这样做.

string是不可改变的.创建一个空string是没用的.

MSDN:

字符串是不可变的 - 在创建对象后,字符串对象的内容无法更改,尽管语法使其看起来好像可以执行此操作.

正如Jonathan Lonowski指出的那样,我们就是string.Empty为此而努力的.

  • 然而,这个无用的案例存在`String.Empty`. (3认同)

Gre*_*reg 5

更新:

为您提供更多信息。

您没有带有 的空构造函数string,但是您有String.Empty. 原因是因为 astring是一个不可变对象string您修改的每个 a 实例实际上都string在内存中创建一个新对象。

例如:string name = "";虽然它是空的,string但它仍将保持大约20 个字节。其中string.Empty将只保存大约八个字节。因此,尽管它们的意思相同,但一个比另一个更有效。

但是,我相信您想要一个空的构造函数来进行操作,而StringBuilder. 可以在此处找到两者之间的一些非常好的用法(确定性能命中/使用情况)。

string可以在此处找到有关 的一些其他信息。它们是不可变的,因此之后内容无法更改

例子:

string first = "Greg "; // Creates string "first" in memory.
string last = "Arrigotti "; // Creates string "last" in memory.
string name = first + last; // Creates string "name" in memory.
Run Code Online (Sandbox Code Playgroud)

当您编辑其中一个时,它只是string在内存中创建一个全新的。例如,如果您正在寻找一种可能在不存在中间名的字段中处理用户数据的方法,则空字符串可能包含有效用法。

希望这些为您指明正确的方向。

  • 从无参数构造函数创建的字符串将是一个空字符串。这是唯一合乎逻辑的可能性。*那不是一个无用的字符串实例*。这是一个完全明智的使用方法,并且很多人*一直*使用它。对于这些用途,使用“空”字段或使用文字更有意义。*正是这些替代方案*使空构造函数变得无用,而不是空字符串本质上没有用的事实。 (5认同)