C# 中对象初始化器的说明

本文关键字:说明 初始化 对象 | 更新日期: 2023-09-27 17:56:20

如果可能的话,有人可以提供C#中对象初始化器的解释和示例。

到目前为止,我知道它们允许您压缩类的实例,这是正确的吗?

C# 中对象初始化器的说明

对象初始值设定项在版本 3 中添加到 C# 中,并提供精简的对象初始化语法。它们只不过是语法糖,这意味着它们允许您表达比以前更短的相同代码。

下面是一个示例:

Foo foo = new Foo { Name = "John", Age = 42 };

这相当于:

Foo foo = new Foo();
foo.Name = "John";
foo.Age = 42;

在此处查看官方文档。

一个相关的功能是集合初始值设定项,它使您可以轻松初始化集合:

var names = new List<string> { "John", "Michael", "Joe" }

上面的代码是构造新列表,然后将每个元素添加到其中的简写。要使集合初始值设定项适用于类型,只需要一个将正确类型作为参数的public Add方法即可。

对象初始值设定项允许您在创建时为对象的任何可访问字段或属性赋值,而无需显式调用构造函数。

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

请参阅对象和集合初始值设定项(C# 编程指南)。

对象初始化器允许您在声明实例时设置实例的属性。例如:

class House
{
    public int Rooms { get; set; }
    public int PeopleLiving { get; set; }
}

然后使用这个:

House h = new House { Rooms = 4, PeopleLiving = 5 }

只需在创建对象时设置这些值,有点像构造函数,您可以在其中选择要设置的属性。您也可以使用构造函数:

House h = new House("10 Some Road", "Some City") { Rooms = 4, PeopleLiving = 5 }

这实际上只是语法糖,编译器将其转换为等效的 C# 代码:

House h = new House();
h.Rooms = 4;
h.PeopleLiving = 5;

来自 MSDN

对象

初始值设定项允许您在创建时将值分配给对象的任何可访问字段或属性,而无需显式调用构造函数。

所有这些都意味着它是一个方便的快捷方式,您可以使用它(希望)使您的代码更具可读性。他们给出的例子:

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

将更传统地写为:

Cat cat = new Cat();
cat.Age = 10;
cat.Name = "Fluffy";

Cat = new Cat(10, "Fluffy");

前者可以更冗长,并且编译的代码之间存在差异(感谢@Kirk Woll 的链接),在这篇文章中解释。初始化器创建一个临时变量,分配属性,然后将其复制到实际变量。像这样:

Cat temporaryCat = new Cat();
temporaryCat.Age = 10;
temporaryCat.Name = "Fluffy";
Cat cat = temporaryCat;

后者(在带有可选参数的 C# 4.0 之前)要求为每个可能的参数组合提供构造函数的许多重载版本。