OOP,在对象的构造函数中调用另一个对象的getter方法是一种好习惯吗?

时间:2012-04-19 17:55:38

标签: c# constructor

我正在尝试创建一个StandardMidiFile对象, 它将包含一个HeaderChunk对象 和TrackChunk对象。

TrackChunk对象将包含MidiEvent个对象。

所以当我创建这个StandardMidiFile对象时, 我想要它的构造函数来构造&包含其他对象。

但是,当创建TrackChunk对象时,它首先需要在GUI-UserControl类中调用getter方法,该方法将确定所有MidiEvents的总长度(以字节为单位)。 然后,该值将用于构建TrackChunk

在构造函数中调用方法是不是很好的OOP练习?

4 个答案:

答案 0 :(得分:2)

总的来说既不好也不坏。在某些特定情况下,它可能是好的也可能是坏的。找到“坏”的东西会有点困难;这个想法没有任何内在错误。

答案 1 :(得分:2)

如果您希望根据另一个对象初始化您的对象,这似乎是正确的做法。例如,如果您有一个“设置”类,那么尝试访问其内部字段的许多新实例甚至是有意义的,以了解如何初始化自己。
总的来说,这既不总是好的,也不总是坏的;通常在编程中,它取决于具体情况。

答案 2 :(得分:1)

我要做的是将轨道长度作为构造函数参数传递。

class StandardMidiFile
{
    HeaderChunk header;
    TrackChunk track;

    public StandardMidiFile()
    {
        var trackLength = // call GUI-UserControl class to get value
        header = new HeaderChunk();
        track = new TrackChunk(trackLength);
    }
}

class HeaderChunk
{
    // blah blah blah
}

class TrackChunk
{
    // blah blah blah

    public TrackChunk(var trackLength)
    {
        // Do stuff here.
    }
}

当然,这实际上取决于你的其他设计。如果TrackChunk只是StandardMidiFile中使用的对象,那么这对我来说更有意义。无论哪种方式都是“正确的”,我相信。

答案 3 :(得分:0)

仅仅因为你可以做某事,并不意味着你应该做。也许扩展问题,提供一个例子,这将有助于你的答案。