对象初始值设定项是 C# 3 中添加的内容,目的是在使用对象时简化对象的构造。
构造函数在给定 0 个或多个参数的情况下运行,用于创建和初始化对象before调用方法获取所创建对象的句柄。例如:
MyObject myObjectInstance = new MyObject(param1, param2);
在这种情况下,构造函数MyObject
将使用这些值运行param1
and param2
。这些都用于创建新的MyObject
在记忆中。创建的对象(使用这些参数设置)被返回,并设置为myObjectInstance
.
一般来说,让构造函数需要完整设置对象所需的参数被认为是一种很好的做法,这样就不可能创建处于无效状态的对象。
但是,通常可以设置一些“额外”属性,但不是必需的。这可以通过重载构造函数来处理,但会导致大量构造函数在大多数情况下不一定有用。
这导致了对象初始值设定项 - 对象初始值设定项允许您在对象上设置属性或字段after它已经建成了,但是before你可以用它来做任何其他事情。例如:
MyObject myObjectInstance = new MyObject(param1, param2)
{
MyProperty = someUsefulValue
};
这与您执行以下操作的行为大致相同:
MyObject myObjectInstance = new MyObject(param1, param2);
myObjectInstance.MyProperty = someUsefulValue;
然而,在多线程环境中,对象初始值设定项的原子性可能是有益的,因为它可以防止对象处于未完全初始化的状态(请参阅这个答案 https://stackoverflow.com/a/12842511/2822719有关更多详细信息) - 它要么为空,要么按您的预期初始化。
此外,对象初始值设定项更易于阅读(特别是当您设置多个值时),因此它们为您提供与构造函数上的许多重载相同的好处,而不需要有许多重载使该类的 API 复杂化。