c# - 对象的成员是否应该在类中自动设置?

标签 c# properties constructor

当你有一个复杂的属性时,你应该实例化它还是让用户实例化它?

例如(C#)

一个)

 class Xyz{
     List<String> Names {get; set;}
 }

当我尝试使用时,我必须设置它。

...
Xyz xyz = new Xyz();
xyz.Name = new List<String>();
xyz.Name.Add("foo");
...

哪里好像我修改了代码

B)

 class Xyz{
     public Xyz(){
         Names = new List<String>();
     }
     List<String> Names {get; }
 }

在这种情况下,我可以将列表设置为只读。

可能会出现另一种情况,我想您会故意不想设置它。例如在

C)

 class Xyz{
     String Name {get; set;}
 }

我认为初始化是不好的做法。

对于这种情况是否有一些经验法则?

最佳答案

作为一条经验法则(意味着该规则总会有异常(exception))在构造函数中设置您的成员。这就是构造函数的用途。

请记住 OO 背后的思想之一是抽象。要求“用户”(即想要在其源代码中实例化您的对象的程序员)这样做是 违反抽象原则。这是用户在使用您的对象之前必须考虑的另一件事,因此也是一个潜在的错误来源。

关于c# - 对象的成员是否应该在类中自动设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/250157/

相关文章:

iphone - 自定义 UIView 子类作为 UIViewController 属性

c# - 具有外键错误复合键的 Entity Framework

c# - .net 中的双向/环回 UDP

c# - 从 JSON (ScriptObject) 反序列化为托管对象

ios - iOS 中 objective-c 中的属性错误

c++ - 试图理解 C++ 类之间的组合

c# - 列表的链表或数组实现的优缺点

javascript - 这行javascript是什么意思?

C++:类 - 重载构造函数 - 单变量?

c++ - 编写构造函数/析构函数是好的做法吗?