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

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

两者之间有什么区别,什么时候在“构造函数”上使用“对象初始化器”,反之亦然?我和C一起工作,如果这重要的话。另外,对象初始化器方法是否特定于C#或.NET?


九州编程
浏览 271回答 3
3回答

GCT1015

对象初始化器是在C#3中添加的,目的是在使用对象时简化对象的构造。构造函数运行,给定0或多个参数,用于创建和初始化对象。以前调用方法获取创建对象的句柄。例如:MyObject myObjectInstance = new MyObject(param1, param2);在本例中,MyObject将使用以下值运行param1和param2..它们都用于创建新的MyObject在记忆中。返回已创建的对象(使用这些参数进行设置),并将其设置为myObjectInstance.通常,构造函数需要所需的参数才能完全设置对象,这样就不可能在无效的状态下创建对象。然而,通常有“额外”属性可以设置,但不是必需的。这可以通过重载的构造函数来处理,但是会导致有许多在大多数情况下不一定有用的构造函数。这将导致对象初始化器-对象初始化程序允许您在对象上设置属性或字段。后已经建好了,但是以前你可以用它做任何事。例如:MyObject myObjectInstance = new MyObject(param1, param2){     MyProperty = someUsefulValue};如果您这样做,它的行为将与您的行为大致相同:MyObject myObjectInstance = new MyObject(param1, param2);myObjectInstance.MyProperty = someUsefulValue;然而,在多线程环境对象初始化器的原子性可能是有益的,因为它防止对象处于未完全初始化的状态(请参阅这个答案(更多细节)-它要么是空的,要么是初始化的,就像你想要的。此外,对象初始化器更易于读取(特别是在设置多个值时),因此它们给您带来了与构造函数上的许多重载相同的好处,而无需使该类的API复杂化。
打开App,查看更多内容
随时随地看视频慕课网APP