构造函数的目的是在创建此类的对象时初始化所有成员变量。
如果没有构造函数的对象初始化是如何为属性赋值?
Product myProduct = new Product {
ProductID = 100, Name = "Kayak",
Description = "A boat for one person",
Price = 275M, Category = "Watersports"
};
使用构造函数初始化
Product myProduct = new Product(){
ProductID = 100, Name = "Kayak",
Description = "A boat for one person",
Price = 275M, Category = "Watersports"
};
答案 0 :(得分:5)
您的两个对象创建表达式是等效的。如果您未指定()
,则默认为您提供。
所以:
var foo = new Foo { X = y };
相当于:
var foo = new Foo() { X = y };
从C#5规范,第7.6.10.1节:
对象创建表达式可以省略构造函数参数列表并括起括号,前提是它包含对象初始值设定项或集合初始值设定项。省略构造函数参数列表并括起括号等同于指定空参数列表。
因此,在这两种情况下,您都要调用Product
的无参数构造函数 - 这是由编译器提供的,因为您还没有显式声明任何构造函数。同样来自C#5规范,这个时间部分10.11.4:
如果类不包含实例构造函数声明,则会自动提供默认实例构造函数。该默认构造函数只是调用直接基类的无参数构造函数。如果类是抽象的,那么默认构造函数的声明可访问性将受到保护。否则,默认构造函数的声明可访问性是公共的。
(这不包括静态类。)