【发布时间】:2014-12-06 07:48:50
【问题描述】:
我正在学习 C#,并决定为矩阵及其功能编写一个类库,以获得一些经验和实践。
好的,现在我有以下类模型:
class Matrix // For rectangular matrices
{ }
class SquareMatrix : Matrix
{ }
class RowMatrix : Matrix
{ }
class ColumnMatrix : Matrix
{ }
每个类都有一个合适的构造函数来获取特定矩阵的维度或顺序。
现在我的 SquareMatrix 类有一个特定的函数来查找和返回行列式。我在这里面临的问题是,如果我的库的用户创建了尺寸为 n 和 n 的 Matrix 类型的实例,那么他将无法使用 Determinant() 方法,因为它仅驻留在 SquareMatrix 中,而他的实例是 Matrix 类型.
其他方法也可能出现类似问题。
所以我的问题是:
- 我的班级设计有缺陷吗?
- 有没有办法解决这个问题? (或者(尽管机会很少)我应该期望用户正确实例化对象吗?)
提前谢谢大家:)
【问题讨论】:
-
没有完美的解决方案,只是在继承方面没有很好地表示关系。见circle-ellipse problem。
-
非常好的链接,谢谢!
-
好吧,当然,最简单的解决方案是简单地摆脱所有继承并使用异常或布尔返回来检查有效性。但这并不是 OOP 的真正意义在于......
标签: c# class inheritance