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

时间:2010-05-20 06:20:53

标签: c# pointers double overloading

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

谢谢。

3 个答案:

答案 0 :(得分:6)

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

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);
 }
}

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

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

答案 1 :(得分:1)

内置Point结构使用int,而PointF使用float,但你可以自己使用double。

答案 2 :(得分:0)

不,不可能使点对象超载。

Point基本上是结构,因此它不支持重载。

最好创建自己的类与点相同。

希望这会有所帮助!