gpt4 book ai didi

c# - 设计良好的类和层次结构

转载 作者:行者123 更新时间:2023-11-30 12:27:10 25 4
gpt4 key购买 nike

我正在学习 C#,并决定为矩阵及其功能编写一个类库,以获得一些经验和实践。

好的,现在我有了如下的类模型:

class Matrix // For rectangular matrices
{ }

class SquareMatrix : Matrix
{ }
class RowMatrix : Matrix
{ }
class ColumnMatrix : Matrix
{ }

每个类都有一个合适的构造函数来获取特定矩阵的维度或顺序。

现在我的 SquareMatrix 类有一个特定的函数来查找和返回行列式。我在这里面临的问题是,如果我的库的用户创建了维度为 n 和 n 的 Matrix 类型的实例,那么他将无法使用 Determinant() 方法,因为它仅驻留在 SquareMatrix 中,而他的实例是 Matrix 类型.

其他方法也会出现类似的问题。


所以我的问题是:

  1. 我的类(class)设计有缺陷吗?
  2. 有什么办法可以解决这个问题吗? (或者(尽管机会很少)我应该期望用户正确实例化对象吗?)

提前谢谢大家:)

最佳答案

您在这里要对抗的是 Liskov 替换原则。基本上你需要做的是不要使用旧的“......是一个......”来计算父类(super class)/子类。而是尝试使用“...可以替代...”

如果您刚刚开始使用 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

当你想在 I 和 D 上工作时,他们会打我,他们是我的最爱

戴尔

关于c# - 设计良好的类和层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com