使用相同的基类,其中某些类只需要基本属性的子集

时间:2011-11-26 22:52:09

标签: c#

我正在写一个类库来模拟汽车。我有一个名为“Dimension”的基类,它提供了测量汽车的属性/方法(例如长度,宽度等)。这是整个汽车的一般情况。

但是,我也需要在各个部件上提供尺寸(例如车轮)。例如,车轮仅使用信息的子集。例如宽度,而不是每个随时可用的属性。为此使用相同的基类是否有意义,或者我是否需要查看更复杂的内容才能准确地对此进行建模?

由于

4 个答案:

答案 0 :(得分:4)

Car 具有维度; Car不是Dimension的子类。 通过让Car继承自Dimension,你浪费了C#中唯一可用的继承槽。

使用继承在具体子类之间共享属性几乎没有什么好处,特别是现在C#有自动属性来保存类型。最好保存继承槽以满足未来的需求。

我建议改为赋予Car对象属性以适当地定义尺寸,并且可能让它(和Wheel)实现一个接口,比如IDimension,以允许你多态地处理Car和Wheel,如果你想编写代码那么可以应用于任何具有尺寸的对象:

enter image description here

答案 1 :(得分:0)

为什么不只使用基类,只使用所有子项共享的属性,然后根据需要添加。我有一个类似的问题,在我的初稿中做了你做的。在我完成了很多应用程序之后,我将其分解并重写了大部分内容,以便基类具有必要的内容,然后根据需要添加。我认为第一种方法要快得多,当你有时间时,你可以回去使它变得美观漂亮。

答案 2 :(得分:0)

如果所有内容都有尺寸,则将其放在基类中,否则请使用界面。

答案 3 :(得分:0)

基类只包含所有派生类之间通用的方法或属性是有意义的。如果您发现子集的子集也包含一些类似的属性,那么创建从第一个派生的第二个基类也是值得的。我通常最终得到一个接口的设置,一些基类实现后接着一些具体的类。

虽然在编码时可能无法看到这一点。我总是在代码完成的末尾找到重构代码的良好实践。

虽然在你的情况下维度可能不是最好的基类。可能值得使用维度界面来允许汽车在需要时从不同的类扩展。