c# - 形状类的正确层次结构
问题描述
我有一个任务,我需要为不同几何图形的类做一个很好的投影层次结构:
- 圆圈
- 圆周
- 戒指
- 长方形
- 三角形
- 等等
一开始,我做了一个抽象类Figure
如下:
abstract class Figure
{
public abstract double Area { get; }
public abstract double GetArea();
}
我计划描述特定图形的所有其他类都将成为该图形的继承者Figure
。而在我理解之前Area
的作品中的想法是没有的。Figure
Circumference
Area
而且我无法决定下一步该做什么:描述另一个抽象类AbstractCircle
,从 中删除这个Area
属性和方法,Figure
或者只是Area = 0
在Circumference
. 或者也许只是让 theCircumference
成为Circle
然后 set的继承者Area = 0
?
逻辑上正确吗?我的意思是,对于将阅读该程序的人来说,这种逻辑是否可以理解?
我会很高兴看到提示和评论。
解决方案
听起来你在正确的轨道上。让我们看一下您尝试分类的不同几何图形:
- 圆- (这是一个形状)
- 圆周- (这是形状的属性)
- 环- (这是一个形状)
- 矩形- (这是一个形状)
- 三角形- (这是一个形状)
除了圆周之外,所有这些都是形状。就像area
,周长是形状的属性。每个二维形状都可以有一个圆周,每个形状将以不同的方式实现。因此,您的Figure
类不需要由circumference
. 相反,circumference
应该是您的财产abstract class
:
abstract class Figure
{
public abstract double Area { get; }
public abstract double GetArea();
public abstract double Circumference { get; }
}
现在,您的所有几何形状都可以实现这个类,而不会遇到您所看到的困难。
推荐阅读
- f# - 当您需要保留数据时,F# 中的适当代码结构是什么?
- reactjs - 如何允许用户更改应用程序设置,而不必在每次重新启动应用程序时重新选择设置
- oracle - Oracle:我们是否应该为在非原子模式下刷新的物化视图重建索引?
- javascript - 重新设计的半折叠侧边栏 - R闪亮的dashboardplus
- .net - 在 Visual Studio 示例中,^ 的含义是什么?
- .net - .net wpf 在页面之间传递数据
- c# - Selenium 测试不访问 URL?
- c++ - 如何在 if 条件下分配功能?
- sql - 适用于 SQL Server 的 PowerBI Online 与桌面凭据
- apache-kafka - 如何使用空闲线程避免 Kafka Streams 应用程序中的事务过期