这听起来像是一个菜鸟问题。
class MyClass
{
public List<MyObjects> myObjects;
public MyClass()
{
//...
}
}
class UserClass
{
public void SomeFunction()
{
MyClass obj = new MyClass();
//Should this belong in constructor of MyClass?
obj.myObjects = new List<MyObjects>;
//Should 'SomeFunction' initialize obj.myObjects before using it, or
//should it assume it has been initialized and just use it?
obj.myObjects.Add(..);
}
}
当调用默认构造函数时,谁负责 MyClass.myObjects 的创建/初始化?
答案 0 :(得分:1)
通常,类的构造函数应该完成该类处于可用状态所需的所有工作。在这种情况下,您应该为myObjects
提供一种访问方法。 OOP的原则是封装数据。这意味着myObjects
应该是私有的。您应该只能通过访问器方法访问它。通过这样做,您可以构建对象,并在实际需要时通过访问器方法懒惰地创建列表。
这是一篇关于Constructors的维基文章。它提到正确编写的构造函数会使对象处于有效状态。
编辑:使用延迟初始化封装myObjects(注意我假设C#,因为您的代码示例看起来有点类似)
class MyClass
{
private List<MyObjects> myObjects;
public MyClass()
{
//...
}
public void Add(MyObject object)
{
MyObjects.Add(object);
}
private List<MyObjects> MyObjects
{
get
{
if (myObjects == null)
{
myObjects = new List<MyObject>();
}
return myObjects;
}
}
}