2011-01-27 31 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();