String类为什么没有无参构造函数?int和object有一个无参数的构造函数。为什么不字符串?更新:为您提供更多信息。您没有带字符串的空构造函数,但您有String.Empty。原因是因为字符串是不可变对象,您修改的每个字符串实例实际上都会在内存中创建一个新字符串。例如:字符串名称="";虽然它是一个空字符串,但它仍然可以容纳大约20个字节。其中string.Empty只能容纳四个或八个字节。因此,尽管它们的意思相同,但一个比另一个更有效。但我相信您需要一个空的构造函数来处理可能更常由StringBuilder处理的操作。可以在此处找到一些非常好的用法(确定性能命中/使用)。可以在此处找到有关字符串的一些其他信息。它们是不可变的,因此内容不能在事后更改。例子:stringfirst="Greg";//在内存中创建字符串“first”。字符串last="Arrigotti";//在内存中创建字符串“last”。字符串名称=第一个+最后一个;//在内存中创建字符串“name”。当其中一个被编辑时,它只是在内存中创建一个全新的字符串。如果您正在寻找一种方法来处理可能没有中间名的字段中的用户数据,则空字符串可能包含有效用法。希望这些能为您指明正确的方向。因为没有必要这样做。字符串是不可变的。创建一个空字符串是没有用的。MSDN:字符串是不可变的——字符串对象的内容在对象创建后不能更改,尽管语法使它看起来好像可以这样做。正如JonathanLonowski指出的那样,我们有string.Empty。字符串是不可变的,所以newString()没有意义。你会用它做什么正如前面提到的,字符串是不可变的,所以如果你操作一个字符串,你每次都会创建一个新的字符串。示例:字符串s="str";//str是在内存中创建的。小号+=“2”;//str2在内存中创建。当您想要操作字符串时使用StringBuilder(这就是为什么您想要一个空的构造函数,对吧?)为什么?为字符串类型提供无参数构造函数是完全合乎逻辑和合理的,但事实并非如此。原因是因为该类型的设计者认为使用string.Empty会更好。能够构造空字符串的多个不同实例可能是合乎逻辑的原因。我没有看到一个在我的头顶上,但这并不意味着其他人没有看到一个。为什么限制使用string.Empty可能是个好主意背后有一些技术原因。首先,所有的空字符串都被认为是相等的,但不一定是ReferenceEquals,所以有多个空字符串似乎没有意义。第二个你说“我有两个看似相似的东西,但我对每个东西都有不同的含义”,那么你可能正在尝试使用错误的工具来解决问题。还有一些关于预定义string.Empty的事情。每当您引用它时,您指的是与其他任何地方相同的对象实例,因此内存中不会有大量空的(和相同的)字符串对象。但是可以吗?当然。因此,虽然这里的每个人都试图证明不应该有这样的构造函数,但我是说可能会有。然而,有人决定在没有类型的情况下进行设计。此外,还定义了一个常量:String.Emptyint是一种值类型,因此它必须具有无参数构造函数。这里不考虑。除了无参数构造函数之外,对象没有理由拥有任何其他东西。没有可用数据。您希望它采用哪些参数?使用无参数构造函数构造的对象也有一定的用途;例如,它们被用作锁对象。然而,它是一个类,所以它不需要有一个公共的无参数构造函数,但由于它不带参数,所以你是否要构造它的一个实例是个问题;微软选择将其具体化,而不是抽象化。string是一个类,因此不需要无参数构造函数。建造它的团队根本不需要一个。人们可以合理地使用这样的构造函数来创建一个空字符串,但他们选择公开string.Empty(和一个空字符串文字)作为一种显式创建空字符串的方式。这些选项提高了无参数构造函数的清晰度。string.Empty和空文字字符串的另一个显着优势是它们能够重用相同的字符串实例。由于字符串是不可变的,因此观察两个不同空字符串引用之间差异的唯一方法是使用ReferenceEquals(或实例上的锁)。因为实际上从来没有必要尽可能地对空字符串进行不同的引用,所以删除无参数构造函数就消除了以等效但性能较低的方式构造空字符串的可能性。在极不可能的情况下,构造一个空字符串的新字符串实例很重要,可以将一个空的char数组传递给相关的构造函数重载,因此删除无参数构造函数不会删除任何函数。如果你想做一些非常不寻常的事情,它只会迫使你竭尽全力去做一些非常不寻常的事情,这是良好语言设计的标志。如果您知道字符串不可移植,您的问题可以改写如下:为什么我不能启动一个空对象?答:因为没有空对象:)以上是C#学习教程:String类为什么没有无参构造函数?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
