扩展Struct(PointF)的最简单方法

时间:2011-01-27 02:57:36

标签: c# point bezier

我们需要使用PointF存储一条额外的信息(沿贝塞尔曲线的位置的t参数)。

由于这些数据不易重新计算,我想在计算该点时将其与PointF一起存储,以便在其他例程中使用。

我们有数百个对PointF的引用,所以我希望不必创建一个新的替换类,而是使用一个额外的属性“扩展”PointF结构。

客户端代码类似于:

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

这(或类似的东西)可能吗?

3 个答案:

答案 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();