C#中的构造函数与初始化函数

Dan*_*ico 7 .net c# constructor

可能重复:
对象初始值设定项和构造函数之间有什么区别?

在c#中,您可以构造一个对象,如:

public class MyObject{

     int val1;
     int val2;

     public MyObject(int val1, val2){
           this.val1 = val1;
           this.val2 = val2;
     }
}
Run Code Online (Sandbox Code Playgroud)

附:

MyObject ob = new MyObject(1,2);
Run Code Online (Sandbox Code Playgroud)

或者:

MyObject ob = new MyObject(){ val1 = 1, val2 = 2 };
Run Code Online (Sandbox Code Playgroud)

这种构造函数之间有什么不同?

RB.*_*RB. 18

MyObject ob = new MyObject(){ val1 = 1, val2 = 2 };
Run Code Online (Sandbox Code Playgroud)

只是语法糖(即速记)

MyObject ob = new MyObject();
ob.val1 = 1;
ob.val2 = 2;
Run Code Online (Sandbox Code Playgroud)

两者之间的一个区别是,您可以从构造函数中设置只读字段,但不能使用速记.

第二个区别是带参数的构造函数强制客户端提供这些值.有关背景读数的详细信息,请参阅构造函数注入与Setter注入.


Arc*_*rus 6

差异可能是第二个不会编译.

您缺少一个默认构造函数,它在第二个示例中调用.