-1

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

对象将TrackChunk包含MidiEvent对象。

所以当我创建这个StandardMidiFile对象时,我希望它是构造函数来构造和包含其他对象。

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

在构造函数中调用方法是一种好的 OOP 做法吗?

4

4 回答 4

2

总的来说,它既不好也不坏。在某些特定情况下,它可能是好是坏。不过,找到“坏”的会有点困难。这个想法本质上没有错。

于 2012-04-19T17:58:45.720 回答
2

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

于 2012-04-19T18:05:07.230 回答
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 中使用的对象,那么这对我来说更有意义。我相信,无论哪种方式都是“正确的”。

于 2012-04-19T18:35:02.020 回答
0

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

于 2012-04-19T17:58:19.413 回答