Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有构造函数,对象初始化是如何发生的?_C#_Collections - Fatal编程技术网

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

C# 没有构造函数,对象初始化是如何发生的?,c#,collections,C#,Collections,构造函数的目的是在创建此类的对象时初始化所有成员变量 没有构造函数的对象初始化如何为属性赋值 Product myProduct = new Product { ProductID = 100, Name = "Kayak", Description = "A boat for one person", Price = 275M, Category = "Watersports" }; 使用构造函数初始化对象 Product myProduct = new Product(){ Product

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

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

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

您的两个对象创建表达式是等效的。如果未指定
()
,则默认情况下会为您提供它

因此:

相当于:

var foo = new Foo() { X = y };
根据C#5规范第7.6.10.1节:

如果对象创建表达式包含对象初始值设定项或集合初始值设定项,则可以省略构造函数参数列表和圆括号。省略构造函数参数列表和括号相当于指定空参数列表

因此,在这两种情况下,您都在调用
Product
的无参数构造函数,这是由编译器提供的,因为您没有显式声明任何构造函数。同样根据C#5规范,这次是第10.11.4节:

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


(这不包括静态类。)

您的两个对象创建表达式是等效的。如果未指定
()
,则默认情况下会为您提供它

因此:

相当于:

var foo = new Foo() { X = y };
根据C#5规范第7.6.10.1节:

如果对象创建表达式包含对象初始值设定项或集合初始值设定项,则可以省略构造函数参数列表和圆括号。省略构造函数参数列表和括号相当于指定空参数列表

因此,在这两种情况下,您都在调用
Product
的无参数构造函数,这是由编译器提供的,因为您没有显式声明任何构造函数。同样根据C#5规范,这次是第10.11.4节:

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


(这不包括静态类。)

您是说
产品
类没有构造函数,还是说没有在对象创建表达式中指定构造函数参数列表?不要混淆实例化语法和构造函数的存在或不存在。如果您没有特别提供无参数构造函数,则会自动为类提供一个无参数构造函数,并且两个语法都调用该无参数构造函数。@Jonsket否,关于对象创建表达式。我建议您澄清这一点-完全删除
产品
类代码会有所帮助,事实上,你是说
产品
类没有构造函数,还是说没有在对象创建表达式中指定构造函数参数列表?不要混淆实例化语法和构造函数的存在或不存在。如果您没有特别提供无参数构造函数,则会自动为类提供一个无参数构造函数,并且两个语法都会调用该无参数构造函数。@Jonsket否,关于对象创建表达式。我建议您澄清这一点-事实上,完全删除
产品
类代码会有所帮助。