我正在尝试创建一个StandardMidiFile
对象,
它将包含一个HeaderChunk
对象
和TrackChunk
对象。
TrackChunk
对象将包含MidiEvent
个对象。
所以当我创建这个StandardMidiFile
对象时,
我想要它的构造函数来构造&包含其他对象。
但是,当创建TrackChunk
对象时,它首先需要在GUI-UserControl类中调用getter方法,该方法将确定所有MidiEvents的总长度(以字节为单位)。
然后,该值将用于构建TrackChunk
。
在构造函数中调用方法是不是很好的OOP练习?
答案 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)
仅仅因为你可以做某事,并不意味着你应该做。也许扩展问题,提供一个例子,这将有助于你的答案。