我刚刚了解了对象初始化器,并且想知道何时使用它们的最佳实践是什么。
这是我读到的关于它们的内容:http: //msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx 它清楚地表明它们对于创建匿名类型是必要的,但我想知道我是否应该在所有其他情况下,尽量选择它们而不是普通的构造函数。
我刚刚了解了对象初始化器,并且想知道何时使用它们的最佳实践是什么。
这是我读到的关于它们的内容:http: //msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx 它清楚地表明它们对于创建匿名类型是必要的,但我想知道我是否应该在所有其他情况下,尽量选择它们而不是普通的构造函数。
我想知道在所有其他情况下我是否应该尝试更喜欢它们而不是普通的构造函数。
我会说不。
构造函数有很多优点。使用构造函数,编译器将强制为您的类型提供所有必需的数据。这意味着您可以使您无法创建处于无效状态的类型的实例,从而可以主动防止许多错误。
另一方面,对象初始化器会产生许多缺点。您必须为需要初始化的任何数据提供可公开设置的属性。它们在构建时不是必需的,因此您类型的用户可能会意外遗漏一些数据。
通常,构造函数中应该需要您的类运行所需的任何内容。即使您有自定义构造函数,仍然可以使用对象初始值设定项,但只能用于在您的类中设置可选的数据。在初始化中混合两者都很好,这意味着你可以这样做:
var yourInst = new YourClass(req1, req2) { OptionalProperty = opt1 }
这可以帮助减少所需的构造函数重载的数量(类似于使用可选参数,但没有可选参数中版本控制的一些缺点)。
我相信你在混淆事情。
对象初始化器将调用类的默认(或指定)构造函数!所以你不能真正使用对象初始化器而不是普通的构造器。因此,当使用对象初始值设定项时,无论如何您都在调用构造函数。
如果您想知道您正在设计的类的对象初始化器,那么答案仍然适用。确保提供有意义的必要构造函数。您不需要做任何特别的事情来启用/允许对象初始化器。它们是自 3.0 版以来 C# 编译器提供的语法糖,允许类的用户在构造后立即初始化类的公共成员。
一个好的经验法则是:
初始化器的主要优点是您不必在创建对象时设置它们 - 您可以稍后根据其他逻辑设置它们。
我目前看到使用它们存在以下问题:
所以我的工作理论是:不要使用对象初始化器,它们会鼓励愚蠢的事情。