C#PointF减法?

时间:2010-01-14 05:13:54

标签: c#

发现System.Drawing.PointF似乎有运算符减去尺寸而不是其他PointF,感到有点震惊。所以我正在尝试编写自己的PointF类,但它需要能够将System.Drawing.Points自动转换为它,否则它实际上不会增加​​任何便利性。所以我写了这些构造函数:

    public PointF(float x = 0, float y = 0)
    {
        this.x = x;
        this.y = y;
    }

    public PointF(System.Drawing.PointF p) : this(p.X, p.Y) { }
    public PointF(System.Drawing.Point p) : this(p.X, p.Y) { }

但我仍然收到这个错误:

  

无法从'System.Drawing.Point'转换为'my_namespace.PointF'

(我有一个接受my_namespace.PointF但我正在传递System.Drawing.Point)的函数。

第三个构造函数不应该启动并自动转换它吗?

3 个答案:

答案 0 :(得分:3)

您的my_namespace.PointF课程中是否定义了隐式转化?它不会自动转换。

public PointF(float x = 0, float y = 0)
{
    this.x = x;
    this.y = y;
}

public PointF(System.Drawing.PointF p) : this(p.X, p.Y) { }
public PointF(System.Drawing.Point p) : this(p.X, p.Y) { }

//add this:
public static implicit operator PointF(System.Drawing.Point pt) 
{ return new PointF(pt); }

答案 1 :(得分:1)

您是否考虑过选择编写“扩展方法”而不是推出自己的类?

您不能通过extn进行操作符重载。方法(在框架的下一版本中提出)..但你应该能够使用名为Add()的同义方法来实现+和get by。

答案 2 :(得分:1)

这为我编译:

class PointF {
 float x; float y;
 public PointF(float x, float y)
 {
     this.x = x;
     this.y = y;
 }

 public PointF(System.Drawing.PointF p) : this(p.X, p.Y) { }
 public PointF(System.Drawing.Point p) : this(p.X, p.Y) { }

 public static implicit operator PointF(System.Drawing.Point pt) { return new PointF(pt); }
 public static implicit operator PointF(System.Drawing.PointF pt) { return new PointF(pt); }
}
//....
static void test(pointf.PointF p) {
}
//....
test(new System.Drawing.PointF(1, 1));