C#中对象初始化器的解释?

时间:2011-05-14 14:06:03

标签: c# object

有人可以在C#中提供对象初始化器的说明,并尽可能提供示例。

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

4 个答案:

答案 0 :(得分:2)

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

以下是一个例子:

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

相当于:

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

查看官方documentation here

相关功能是集合初始值设定项,可让您轻松初始化集合:

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

上面的代码是构建新List,然后将每个元素添加到其中的简写。对于适用于类型的集合初始值设定项,除了使用正确类型作为参数的public Add方法之外,不需要其他任何内容。

答案 1 :(得分:0)

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

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

请参阅Object and Collection Initializers (C# Programming Guide)

答案 2 :(得分:0)

Object Initialisers允许您在声明实例时设置实例的属性。例如:

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;

答案 3 :(得分:0)

来自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),在this post中进行了解释。初始化器创建一个临时变量,分配属性,然后将其复制到实际变量。像这样:

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

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