簡體   English   中英

C#PointF減去?

[英]C# PointF Subtract?

驚訝地發現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 )。

第三構造函數不應該加入並對其進行自動轉換嗎?

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

您是否考慮過編寫“擴展方法”而不是推出自己的類的選擇?

您本身不能通過extn重載運算符。 方法(在框架的下一個修訂版中提出)..但是您應該能夠對+使用一個名為Add()的同義詞方法並獲得。

這為我編譯:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM