我正在学习C#,并决定为矩阵及其功能编写一个类库,以获得一些经验和实践。
好的,现在我有以下类模型:
class Matrix // For rectangular matrices
{ }
class SquareMatrix : Matrix
{ }
class RowMatrix : Matrix
{ }
class ColumnMatrix : Matrix
{ }
每个类都有一个合适的构造函数来获取特定矩阵的维度或顺序。
现在,我的SquareMatrix类具有查找和返回行列式的特定功能。我在这里面临的问题是,如果我的库的用户创建了一个类型为Matrix且维度为n和n的实例,那么他将无法使用Determinant()方法,因为它只驻留在SquareMatrix中,而他的实例是Matrix类型
其他方法也可能出现类似的问题。
所以我的问题是:
提前谢谢大家:)
答案 0 :(得分:1)
你在这里与之抗争的是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打我,他们是我最喜欢的
戴尔
答案 1 :(得分:1)
好问题。
我想:
用户应负责实例化正确的实例。如果用户想要一个矩阵,那就是他得到的东西。如果Matrix中不存在该功能,那就太糟糕了。
但是,如果你有一个共同的函数,它的行为会有所不同,具体取决于它的Matrix类型,那么在这种情况下你将创建一个返回Matrix的工厂。它将根据参数返回相应的Matrix。用户可以在Matrix上调用该函数,但它的行为实际上会有所不同,具体取决于您实际返回的Matrix。