1

这听起来像是一个菜鸟问题。

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的创建/初始化?

  1. MyClass 的构造函数。
  2. MyClass 的用户。
4

1 回答 1

1

通常,类的构造函数应该完成所有必要的工作,以使该类处于可用状态。在您的情况下,您可能应该为myObjects. OOP 的原则是封装数据。这意味着它myObjects应该是私有的。您应该只能通过访问器方法访问它。通过这样做,您可以构造对象并在实际需要时通过访问器方法懒惰地创建列表。

这是一篇关于Constructors的 wiki 文章。它提到正确编写的构造函数将使对象处于有效状态。

编辑:用延迟初始化封装 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;
        }
    }
}
于 2012-08-22T12:35:50.947 回答