我正在学习C#,并决定为矩阵及其功能编写一个类库,以获得一些经验和实践.
好的,现在我有以下类模型:
class Matrix // For rectangular matrices
{ }
class SquareMatrix : Matrix
{ }
class RowMatrix : Matrix
{ }
class ColumnMatrix : Matrix
{ }
每个类都有一个合适的构造函数来获取特定矩阵的维度或顺序.
现在,我的SquareMatrix类具有查找和返回行列式的特定功能.我在这里面临的问题是,如果我的库的用户创建了一个类型为Matrix且维度为n和n的实例,那么他将无法使用Determinant()方法,因为它只驻留在SquareMatrix中,而他的实例是Matrix类型.
其他方法也可能出现类似问题.
所以我的问题是:
>我的班级设计有缺陷吗?
>有没有办法解决这个问题? (或者(虽然它有一个难得的机会)我是否应该期望用户正确地实例化对象?)
谢谢大家 :)
最佳答案 你在这里与之抗争的是Liskov Substitution原则.基本上你需要做的就是不要使用旧的“……是……”来制定超级/子类.而是尝试使用“…可替代…”
如果您刚刚开始使用C#,那么您应该首先学习SOLID的原理.关于S和L的答案
这将帮助您使用L,http://www.oodesign.com/liskov-s-substitution-principle.html
检查一下SOLID,http://www.codeproject.com/Articles/703634/SOLID-architecture-principles-using-simple-Csharp
当你想要工作我和D打我,他们是我的最爱
戴尔