c# - 我应该使用对象初始值设定项还是构造函数?

标签 c# constructor object-initializer

<分区>

我刚刚了解了对象初始化器,想知道何时使用它们的最佳实践是什么。

这是我读到的有关它们的内容:http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx 它清楚地表明它们对于创建匿名类型是必需的,但我想知道在所有其他情况下我是否应该尝试使用它们而不是普通构造函数。

最佳答案

I would like to know if I should try to prefer them to normal constructors in all the other cases.

我会说不。

构造器有很多优点。使用构造函数,编译器将强制为您的类型提供所有必需的数据。这意味着您无法创建处于无效状态的您的类型的实例,这使您可以主动防止许多错误。

另一方面,对象初始值设定项会产生许多缺点。您必须为需要初始化的任何数据提供可公开设置的属性。在构造时不需要它们,因此您这种类型的用户可能会不小心遗漏一些数据。

一般来说,构造函数中应该需要您的类运行所需要的任何东西。对象初始值设定项仍然可以使用,即使你有一个自定义的构造函数,但应该只用于在你的类中设置可选的数据。在初始化中混合使用两者很好,这意味着您可以:

var yourInst = new YourClass(req1, req2) { OptionalProperty = opt1 }

这有助于减少所需的构造函数重载次数(类似于使用 optional arguments ,但没有可选参数中版本控制的一些缺点)。

关于c# - 我应该使用对象初始值设定项还是构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15555312/

相关文章:

java - java中父类(super class)和子类之间的构造函数

c# - 使用初始值设定项创建对象数组似乎失败

c# - 如何将项目添加到使用 { blah = "asdf"} 初始化的对象

c# - 从 C# 源文件中提取文档注释

c# - Shopify 访问 token 返回 null

c# - 共享滚动位置、共享数据源但不同步滚动位置的两个数据网格

c# - 打开xml无法获取绘图元素

C++ 在构造函数 EXC_BAD_ACCESS 中初始化数组

node.js - 如何从nodejs中的构造函数发出/捕获事件?