在C#中我们可以写
Int a=new int();
char a=new Char();
person p=new person();
其中人是类,
那为什么我们不能写
string s =new string();
毕竟字符串是引用类型。 那为什么不可能呢?
你不能写它,因为string
没有构造函数采用 0 参数。 相反,你可以写这样的东西:
String a = new string(new char[]{});
int和 char 是基元类型。在 C# 中,它们实际上只是 Int32 和 Char 类的别名。这些类具有不带参数的构造函数。对于 Person(( 类,如果您的代码编译,它还有一个没有参数的构造函数。 字符串有点不同。以下是根据 MSDN 的有效字符串构造函数的列表:https://msdn.microsoft.com/en-us/library/system.string.string(v=vs.110(.aspx
- 字符串(字符*(
- 字符串(字符*, int32, int32(
- 字符串(字符,Int32(
- 字符串(字符[](
- 字符串(字符[], int32, int32(
- 字符串(SByte*(
- 字符串(SByte*, int32, int32(
- 字符串(SByte*, int32, int32, encoding(
就个人而言,如果我想显式初始化 String 而不经历使用上述构造函数的过程,我通常只使用以下内容:
String testStr = String.Empty;
这实际上与:
String testStr = "";
使用构造函数基于另一个现有字符串创建新字符串是没有意义的 - 这就是为什么没有构造函数重载允许这样做的原因。只是做
string s = "String in a C#";
创建引用类型(例如类(时,可以选择它将具有的构造函数(对于值类型,需要无参数构造函数,因此选择受到限制(。如果未指定任何构造函数,则会隐式创建默认的无参数构造函数。C# 设计器团队认为不值得在String
类型上使用无参数构造函数。这就是为什么你不能打电话给new string()
.仅此而已。
您可以对自定义类执行相同的操作。
public class C
{
public C(int i)
{
}
}
var c = new C(); // invalid