为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2019-07-13 09:25:12
对象初始化器和构造函数之间有什么区别?两者之间有什么区别,什么时候在“构造函数”上使用“对象初始化器”,反之亦然?我和C一起工作,如果这重要的话。另外,对象初始化器方法是否特定于C#或.NET?
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

对象初始化器是在C#3中添加的,目的是在使用对象时简化对象的构造。

构造函数运行,给定0或多个参数,用于创建和初始化对象。以前调用方法获取创建对象的句柄。例如:

MyObject myObjectInstance = new MyObject(param1, param2);

在本例中,MyObject将使用以下值运行param1param2..它们都用于创建新的MyObject在记忆中。返回已创建的对象(使用这些参数进行设置),并将其设置为myObjectInstance.

通常,构造函数需要所需的参数才能完全设置对象,这样就不可能在无效的状态下创建对象。

然而,通常有“额外”属性可以设置,但不是必需的。这可以通过重载的构造函数来处理,但是会导致有许多在大多数情况下不一定有用的构造函数。

这将导致对象初始化器-对象初始化程序允许您在对象上设置属性或字段。已经建好了,但是以前你可以用它做任何事。例如:

MyObject myObjectInstance = new MyObject(param1, param2){
    MyProperty = someUsefulValue};

如果您这样做,它的行为将与您的行为大致相同:

MyObject myObjectInstance = new MyObject(param1, param2);myObjectInstance.MyProperty = someUsefulValue;

然而,在多线程环境对象初始化器的原子性可能是有益的,因为它防止对象处于未完全初始化的状态(请参阅这个答案(更多细节)-它要么是空的,要么是初始化的,就像你想要的。

此外,对象初始化器更易于读取(特别是在设置多个值时),因此它们给您带来了与构造函数上的许多重载相同的好处,而无需使该类的API复杂化。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 684 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信