我们需要使用PointF存储一条额外的信息(沿贝塞尔曲线的位置的t参数)。
由于这些数据不易重新计算,我想在计算该点时将其与PointF一起存储,以便在其他例程中使用。
我们有数百个对PointF的引用,所以我希望不必创建一个新的替换类,而是使用一个额外的属性“扩展”PointF结构。
客户端代码类似于:
PointF intersection = new PointF();
intersection.X = 3457.23;
intersection.Y = -277.738;
intersection.t = 0.744;
这(或类似的东西)可能吗?
答案 0 :(得分:3)
抱歉,PointF是一个结构(正如你已经说过的那样)所以你无法扩展它。
您需要制作自己的类型
答案 1 :(得分:2)
您无法将属性或字段添加到您没有源的现有类或结构上。您需要创建自己的新结构来携带其他数据。
答案 2 :(得分:2)
这相当脏,但如果给定PointF的T值始终相同,则可以使用扩展方法来模拟属性提供的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();