gpt4 book ai didi

.net - System.String - 为什么不实现无参数构造函数?

转载 作者:行者123 更新时间:2023-12-03 10:24:15 24 4
gpt4 key购买 nike

我想问一下 System.String 不包含无参数构造函数这一事实背后的想法是什么。

因此,当存在 new() 约束时,您不能使用此类型。

更新

为什么你认为 new string() 没用,例如new int() 不是没用。我真的看不出区别。我真的希望能够对字符串使用 new() 约束,因为我期望的是 String.Empty。

更新2

我知道 int 是一种值类型,所有值类型都有默认的无参数构造函数。
我指的是@John Saunders 的回答(和类似的回答),这些回答说 new String() 基本上没有任何用处。因此,如果 new String() 并不意味着任何有用的东西,那么 new int() 有什么用呢?我也明白值类型具有默认的无参数构造函数很重要。更重要的是,我认为 string 有一个默认的无参数构造函数会非常好。缺少无参数构造函数对我来说意味着如果没有初始化它的参数,对象根本无法存在。在我看来,字符串不需要任何参数,因为它可能为空。我问这个问题是因为我想知道 string 没有无参数构造函数是否有一些重要的原因,或者它只是设计或其他什么。

更新3

我想这将是最后一次更新,因为它看起来更像是一篇博文而不是一个问题。在 Java 中,字符串也是不可变的,而 new String() 是完全合法的。但是,无参数构造函数的文档说:

Initializes a newly created String object so that it represents an empty character sequence. Note that use of this constructor is unnecessary since Strings are immutable.



更新4

好的,最后更新 ;) 我必须同意约翰桑德斯的观点。我正在使用具有 new() 约束的代码,它适用于自定义类。然后,我的同事需要更改 ints 的代码,没问题。然后将其更改为字符串,我们遇到了问题。当我现在考虑它时,我想我们正在使用的代码需要更改以反射(reflect)我们需要标量类型而不是具有无参数构造函数的类。尽管如此,我仍然认为您可以编写 new int() 而您无法编写 new string() 的说法有点不一致(是的,我知道 int 是一种值类型;))。感谢您的所有回答!

预先感谢您的帮助。

最佳答案

如果你可以使用

string s = new string();

你会用它做什么?字符串是不可变的。

一些读者认为我在说无参数的字符串构造函数是无用的。那并非我的本意。我的意思是从这样的构造函数创建的空字符串在其余代码中是无用的。

请记住 OP 所说的他想做的事情:
public void SomeMethod<T>() where T : new()
{
var t = new T();
// Do _what_ now?
}

// Call:
SomeMethod<string>();

我不知道你能用 t 做什么建成后。

关于.net - System.String - 为什么不实现无参数构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com