如果没有构造函数,对象初始化是如何发生的?

时间:2014-12-17 18:41:43

标签: c# collections

构造函数的目的是在创建此类的对象时初始化所有成员变量。

如果没有构造函数的对象初始化是如何为属性赋值?

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"
};

1 个答案:

答案 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:

  

如果类不包含实例构造函数声明,则会自动提供默认实例构造函数。该默认构造函数只是调用直接基类的无参数构造函数。如果类是抽象的,那么默认构造函数的声明可访问性将受到保护。否则,默认构造函数的声明可访问性是公共的。

(这不包括静态类。)