这两者之间的区别是什么?什么时候你会使用“对象初始化器”而不是“构造函数”,反之亦然?我正在和C#合作,如果这很重要的话。另外,对象初始化器方法是特定于C#还是.NET的?
发布于 2013-05-31 14:04:25
当你这样做的时候
Person p = new Person { Name = "a", Age = 23 };
这就是对象初始化器的基本功能:
Person tmp = new Person(); //creates temp object calling default constructor
tmp.Name = "a";
tmp.Age = 23;
p = tmp;
现在,这促进了像this这样的行为。了解对象初始化器是如何工作的很重要。
发布于 2009-04-11 19:33:41
如果您有必须在对象上设置的属性才能正常工作,一种方法是只公开一个构造函数,该构造函数要求将这些强制属性作为参数。
在这种情况下,如果不指定这些强制属性,则无法创建对象。像这样的东西不能由对象初始化器强制执行。
对象初始化器实际上只是缩短初始赋值的“语法便利”。不错,但在功能上不是很相关。
Marc
发布于 2009-04-11 19:32:51
构造函数是一个(可能)接受参数并返回类的新实例的方法。它可以包含初始化逻辑。下面你可以看到一个构造函数的例子。
public class Foo
{
private SomeClass s;
public Foo(string s)
{
s = new SomeClass(s);
}
}
现在考虑以下示例:
public class Foo
{
public SomeClass s { get; set; }
public Foo() {}
}
您可以使用对象初始值设定项实现与第一个示例中相同的结果,前提是您可以使用以下代码访问SomeClass:
new Foo() { s = new SomeClass(someString) }
正如您所看到的,对象初始化器允许您在执行构造的同时为公共字段和公共(可设置)属性指定值,这在构造函数不提供任何重载初始化某些字段时特别有用。但是,请注意,对象初始化器只是语法糖,编译后并不会真正与赋值序列不同。
https://stackoverflow.com/questions/740658
复制相似问题