我偶尔会遇到这种类型的设计问题,但我还没有找到解决问题的一般方法。以下是详细信息:
我有一个Table
类,其行标题,列标题和表本身都有Grid
个实例。这两个类都是可重用的组件。
class Grid {
public void Bar() { /* ... */}
}
class Table {
public Grid[] Grids { get; }
public void Foo() { /* ... */ }
}
我还有一个CustomGrid
添加了一个新方法(用一些逻辑绘制花哨的颜色)。现在我想要子类Table来添加公开CustomGrid
附带的新功能的方法。
class CustomGrid : Grid {
public void Bar2() { /* ... */}
}
class CustomTable : Table {
public void Foo2() { /* ... */ }
}
Table
引用了Grid
个对象,CustomTable
需要向下转发CustomGrid
以使用新方法,我认为这些方法并不是很漂亮。 Table
课程中使用泛型,CustomTable
可以使用CustomGrid
,但我认为仍然需要进行类型检查和向下转换。OnPaint
方法。此外,一些私有构造需要公开以用于包含类。你会如何处理这种设计?我认为上述困难意味着其中存在问题,但请指出选项评估中的任何错误。
答案 0 :(得分:1)
您可以使用new
关键字:
public class CustomTable : Table
{
new public CustomGrid[] Grids { get; }
public void Foo2() { /* ... */ }
}
这会覆盖您的Grid[] Grids { get; }
至CustomGrid[] Grids { get; }