我正在学习C#并决定为矩阵及其功能编写一个类库以获得一些经验和实践。设计良好的类和层次结构
好了,现在我有下面的类模型:
class Matrix // For rectangular matrices
{ }
class SquareMatrix : Matrix
{ }
class RowMatrix : Matrix
{ }
class ColumnMatrix : Matrix
{ }
每个类的具有合适的构造采取尺寸或特定矩阵的顺序。
现在我的SquareMatrix类有一个特定的功能来查找并返回行列式。我在这里遇到的问题是,如果我的库的用户创建了维度为n和n的Matrix类型的实例,那么他将无法使用Determinant()方法,因为它只驻留在SquareMatrix中,而他的实例的类型为Matrix 。
其他方法也会出现类似的问题。
所以我的问题是:
- 是我的一流的设计缺陷?
- 有什么办法可以解决这个问题吗? (OR(尽管它有一个难得的机会),我应该还是期待用户正确实例化对象?)
谢谢大家提前:)
没有完美的解决方案,这种关系在继承方面表现不佳。参见[圆椭圆问题](http://en.wikipedia.org/wiki/Circle-ellipse_problem)。 – 2014-10-11 06:59:16
真的很好链接,谢谢! – crazyGamer 2014-10-11 13:05:35
那么当然最简单的解决方案就是简单地抛弃所有的继承,并有异常或布尔返回来检查有效性。但是,这不是真正的OOP是... – crazyGamer 2014-10-11 13:22:23