我们可以在C#中重载Point对象,以便支持双打吗?

Geo*_*ler 2 c# double pointers overloading

我正在使用Point对象绘制一些图形,我想设置它以便它支持双精度作为其参数.我正在开发Visual C#,WindowsConsoleApplication

谢谢.

Igo*_*aka 6

你可以使用PointF.全部System.Drawing支持浮点运算.为什么不使用那些?否则,如果您真的想使用doubles并将它们传递给整数绘图函数,则需要创建自己的结构.这样的效果:

struct MyPoint {
 public double X{get;set;}
 public double Y{get;set;}

 public MyPoint(double x, double y) {
   X = x;
   Y = y;
 }

 public implicit operator Point() {
  return new Point(X, Y);
 }
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常截断的实现,如果您查看Point(通过定义)的源元数据,您将看到需要实现的所有覆盖和运算符.

此外,作为一个兴趣点,您可能会注意到Point可以隐式转换为PointF,但不是相反.由于潜在的精度损失,不支持此功能.如果我是你,我会重新考虑设计,因为它似乎违背了API设计师的最佳使用方法.