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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (63)

这两者之间有什么区别,你会在什么时候使用“对象初始化器”而不是“构造器”,反之亦然?如果有问题,我正在与C#合作。另外,是C#还是.NET专用的对象初始值设定项方法?

提问于
用户回答回答于

对象初始化器被添加到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;
用户回答回答于

构造函数是一种类型的定义方法,它接受指定数量的参数并用于创建和初始化对象。

对象初始化程序是在构造函数之后的对象上运行的代码,可用于将对象上的任意数量的字段简洁地设置为指定的值。这些字段的设置发生调用构造函数之后

如果构造函数充分设置了对象的初始状态,则可以在没有对象初始值设定项的帮助下使用构造函数。但是,对象初始值设定项必须与构造函数一起使用。该语法需要构造函数的显式或隐式使用(VB.Net和C#)来创建初始对象。当构造函数没有充分初始化对象以供您使用时,您会使用对象初始值设定项,并使用一些简单的字段和/或属性集。

扫码关注云+社区