C#.NET:新对象需要why()

时间:2016-01-30 07:16:44

标签: c# .net vb.net

为什么我们必须把' ()'当我们想要定义一个新的或数组时,但是当我们设置预定义的值时,我们不必将它放入?这个问题适用于c#,它在VB.NET中没问题 这是一个例子:

C#

class Program
{
    static void Main(string[] args)
    {
        MyClass w = new MyClass();
        MyClass w = new MyClass;//this line contain an error
        MyClass e = new MyClass() { ss = "" };
        MyClass g = new MyClass { ss = "" };
    }
}
class MyClass
{
    public string ss;
}

VB.NET

Sub Main()
    Dim a As my_class = New my_class()
    Dim v As my_class = New my_class
    Dim b As my_class = New my_class() With {.ss = ""}
    Dim n As my_class = New my_class With {.ss = ""}
End Sub
Class my_class
    Public ss As String
End Class

1 个答案:

答案 0 :(得分:2)

规范说:

  

对象创建表达式可以省略构造函数参数列表   并附上括号,前提是它包含一个对象或集合   初始化。省略构造函数参数列表并封闭   括号相当于指定一个空参数列表。

这与数组初始值设定项一致:

int[] t = new[] { 1, 2, 3, 4 }; 

非常有趣的答案在这里:Why are C# 3.0 object initializer constructor parentheses optional?