为什么字符串 S =new string() 在 C# 中无效



在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

相关内容

最新更新