【发布时间】:2023-08-31 06:48:01
【问题描述】:
在我以前的 C++ 工作中,我们总是非常小心地封装成员变量,并且仅在绝对必要时才将它们公开为属性。我们会有非常具体的构造函数来确保您在使用对象之前完全构造它。
如今,使用 ORM 框架、依赖注入、序列化等,您似乎最好只依赖默认构造函数并在属性中公开有关您的类的所有内容,以便您可以注入东西,或者更动态地构建和填充对象。
在 C# 中,对象初始化器更进一步,它使您能够基本上定义自己的构造函数。 (我知道对象初始化器并不是真正的自定义构造器,但我希望你明白我的意思。)
这个方向有什么普遍的担忧吗?为了方便,封装似乎开始变得不那么重要了。
编辑:我知道您仍然可以仔细封装成员,但我只是觉得当您尝试创建一些类时,您要么必须坐下来仔细考虑如何封装每个成员,要么将其公开为一个属性,并担心它稍后是如何初始化的。现在似乎最简单的方法是将事物公开为属性,而不是那么小心。也许我完全错了,但这只是我的经验,尤其是新的 C# 语言功能。
【问题讨论】:
-
不要让任何人欺骗你,那些对象初始化器只是语法糖。
-
我知道对象初始化器并不是真正的构造器,但这不是我的意思。它们允许您使用默认构造函数构造对象并手动设置属性。
-
不太确定它们之间有什么区别,只是输入每个语句来设置每个属性。不过没关系。
-
“不要让任何人欺骗你,”我理解对象初始化器在做什么,这不是我要讨论的重点。如果你觉得有必要指出一些显而易见的事情,你下次能不能把居高临下的废话撇开。
标签: frameworks dependency-injection constructor encapsulation