2016-05-20 97 views
0

在c#中我用来通过调用默认构造函数来初始化我的类。您可以类名在C#中没有()的类初始化

var class = new MyClass() 
{ 
    Property= 1, 
    Property2 = "test" 
} 

但我最后一次看到的例子没有()后提()。像这样

var class = new MyClass 
{ 
    Property= 1, 
    Property2 = "test" 
} 

与没有区别吗?

+3

没有,有ISN”任何。这是一回事。只是无参数构造函数的合成糖。 – Ian

+0

@Sinatr不是一个人。这两个代码示例都是对象初始化器。 –

+0

@PatrickHofman,是的,谢谢,很快我会学会仔细阅读问题;) – Sinatr

回答

2

此功能称为对象初始化程序,它已在C#3.0中引入。

当你使用它时,()是多余的,所以没有区别的两个代码示例

2

没有区别。如果您使用resharper,则将其标记为冗余。

您是否可以使用(),这取决于您的风格。

1

之间。如您在IL代码中看到它们是相同的:

internal class Program 
    { 
     public class MyClass 
     { 
     public int Property 
     { 
      get; 
      set; 
     } 

     public string Property2 
     { 
      get; 
      set; 
     } 
    } 

    private static void Main(string[] args) 
    { 
     Program.MyClass expr_06 = new Program.MyClass(); 
     expr_06.Property = 1; 
     expr_06.Property2 = "test"; 
     Program.MyClass expr_20 = new Program.MyClass(); 
     expr_20.Property = 1; 
     expr_20.Property2 = "test"; 
    } 
}