首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对象初始化器和构造函数有什么区别?

对象初始化器和构造函数有什么区别?
EN

Stack Overflow用户
提问于 2009-04-11 19:24:12
回答 5查看 90.8K关注 0票数 193

这两者之间的区别是什么?什么时候你会使用“对象初始化器”而不是“构造函数”,反之亦然?我正在和C#合作,如果这很重要的话。另外,对象初始化器方法是特定于C#还是.NET的?

EN

回答 5

Stack Overflow用户

发布于 2013-05-31 14:04:25

当你这样做的时候

代码语言:javascript
复制
Person p = new Person { Name = "a", Age = 23 };

这就是对象初始化器的基本功能:

代码语言:javascript
复制
Person tmp = new Person(); //creates temp object calling default constructor
tmp.Name = "a";
tmp.Age = 23;
p = tmp;

现在,这促进了像this这样的行为。了解对象初始化器是如何工作的很重要。

票数 34
EN

Stack Overflow用户

发布于 2009-04-11 19:33:41

如果您有必须在对象上设置的属性才能正常工作,一种方法是只公开一个构造函数,该构造函数要求将这些强制属性作为参数。

在这种情况下,如果不指定这些强制属性,则无法创建对象。像这样的东西不能由对象初始化器强制执行。

对象初始化器实际上只是缩短初始赋值的“语法便利”。不错,但在功能上不是很相关。

Marc

票数 17
EN

Stack Overflow用户

发布于 2009-04-11 19:32:51

构造函数是一个(可能)接受参数并返回类的新实例的方法。它可以包含初始化逻辑。下面你可以看到一个构造函数的例子。

代码语言:javascript
复制
public class Foo
{
    private SomeClass s;
    public Foo(string s)
    {
       s = new SomeClass(s);
    }
}

现在考虑以下示例:

代码语言:javascript
复制
public class Foo
{
    public SomeClass s { get; set; }
    public Foo() {}
}

您可以使用对象初始值设定项实现与第一个示例中相同的结果,前提是您可以使用以下代码访问SomeClass:

代码语言:javascript
复制
new Foo() { s = new SomeClass(someString) }

正如您所看到的,对象初始化器允许您在执行构造的同时为公共字段和公共(可设置)属性指定值,这在构造函数不提供任何重载初始化某些字段时特别有用。但是,请注意,对象初始化器只是语法糖,编译后并不会真正与赋值序列不同。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/740658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档