3

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

由于无法轻松重新计算此数据,因此我想在计算点时将其与 PointF 一起存储,以供其他例程使用。

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

客户端代码将类似于:

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

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

4

3 回答 3

3

抱歉 PointF 是一个结构(正如你已经说过的那样),所以你不能扩展它。

您需要制作自己的类型

于 2011-01-27T03:00:30.770 回答
2

这是相当肮脏的,但如果 T 的值对于给定的 PointF 将始终相同,您可以使用扩展方法来模拟属性提供的获取/设置行为。假设您使用的是 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();
于 2011-01-27T12:21:03.753 回答
2

您不能将属性或字段添加到您没有源的现有类或结构中。您将需要制作自己的新结构来携带额外的数据。

于 2011-01-27T03:01:46.587 回答