2011-01-27 72 views
3

我們需要用PointF(貝塞爾曲線上的位置的t參數)存儲另外一條信息。最簡單的方法來擴展結構(PointF)

由於無法輕易重新計算此數據,因此我希望在計算該點時將其與PointF一起存儲,以便在其他例程中使用。

我們有數百個對PointF的引用,所以我希望不必創建一個新的替換類,而是用一個附加屬性「擴展」PointF結構。

客戶端代碼會是這樣的:

PointF intersection = new PointF(); 
intersection.X = 3457.23; 
intersection.Y = -277.738; 
intersection.t = 0.744; 

這是(或像這樣的東西)可能嗎?

回答

2

不能屬性或字段添加到現有的類或結構不必爲源。您將需要創建自己的新結構來攜帶其他數據。

+0

不是我想聽到的...但正是我的想法。謝謝! – Flipster 2011-01-27 03:32:19

3

抱歉,PointF是一個結構體(因爲你已經說過了),所以你不能擴展它。

你需要讓自己的類型

2

這很髒,但如果T的值總是與給定的PointF相同,則可以使用擴展方法來模擬屬性提供的get/set行爲。假設你正在使用C#3.0編譯器,你可以做這樣的事情。

public static class PointFExtensions 
{ 
     private static Dictionary<PointF, float> _dict = new Dictionary<PointF, float>(); 

     public static void SetT(this PointF self, float t) 
     { 
     _dict.Add(self, t); 
     } 

     public static float GetT(this PointF self) 
     { 
     return _dict[self]; 
     } 
} 

然後,你可以使用這些方法是這樣的:

PointF pf = new PointF(4.0F, 5.0F); 
pf.SetT(42); 
float t = pf.GetT();