c# - OOP 对象创建指南

标签 c# .net oop

<分区>

假设有一个像这样的多边形类:

public class Polygon 
{
   Point[] _vertices;

   public class Polygon(Point[] vertices)
   {
       _vertices = vertices;
   }
}

要制作三角形、正方形、六边形,您更愿意:

  • 从 Polygon 继承您的 Triangle、Square 等提供 特定的构造函数并以编程方式生成点?
  • 添加一个 CreateSquare 静态方法来返回一个随时可用的 Polygon 类?

这个:

public class Square : Polygon
{
   public class Polygon(double size)
   {
       _vertices = new Point[]{ new Point(0,0), new Point(size,0), new Point(size,size), new Point(0,size)};
   }
}

或者这个:

public class Polygon 
{
    Point[] _vertices;

    public class Polygon(Point[] vertices)
    {
       _vertices = vertices;
    }

    public static Polygon CreateSquare(double size)
    {
        double verts = new Point[]{ new Point(0,0), new Point(size,0), new Point(size,size), new Point(0,size)};

        return new Polygon(verts);
    }  
 }

从 OOP 编程的角度来看,哪种方法更正确?请注意,派生类不会向原始多边形添加任何内容。

另外,对于后一种情况,有没有方便的命名约定?

是否还有其他我不知道的方法?

谢谢。

最佳答案

如果不知道使用这些类的上下文,这个问题永远不会有明确的答案,但是如果不需要更具体的类,我就不会创建它们。如果您将 Color 属性添加到 Polygon,您也不会创建 RedPolygonBlueSquare

只要有正方形独有的行为,您就可以创建子类 - 例如,我可以想象一些数学运算(例如 HitTest )在正方形上的执行速度会比在多边形上的执行速度快,而多边形恰好是正方形.

关于c# - OOP 对象创建指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44759168/

相关文章:

c# - 我该如何处理 "CrossThreadMessagingException"?

.net - WCF错误: The caller was not authenticated by the service

.net - 使用 Windows 服务运行 UI

javascript - 如何覆盖事件并仍然执行旧事件?

c# - 在 Visual Studio 2013 中导航到定义 "behind"代理

c# - 如何编写加载 SQL Server 数据表的 Excel 插件?

c# - .net MVC Controller 如何解析参数

javascript - 如何将 OOP 添加到这些 JS 函数中?

Javascript OOP - jQuery 在 ajax 请求中调用 "this"

c# - Task<T>.Result 和字符串连接