Самый простой способ расширить Struct (PointF) - PullRequest
3 голосов
/ 27 января 2011

Нам нужно сохранить один дополнительный фрагмент информации с помощью PointF (параметр t местоположения вдоль кривой Безье).

Поскольку эти данные не могут быть легко пересчитаны, я хочу сохранить их сPointF во время расчета точки для использования в других подпрограммах.

У нас есть сотни ссылок на PointF, поэтому я надеялся не создавать новый класс замещения, а "расширять" PointFstruct с одним дополнительным свойством.

Код клиента будет выглядеть примерно так:

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

Возможно ли это (или что-то подобное)?

Ответы [ 3 ]

3 голосов
/ 27 января 2011

Извините, PointF - это структура (как вы уже сказали), поэтому вы не можете расширить ее.

Вам нужно будет сделать свой собственный тип

2 голосов
/ 27 января 2011

Это довольно грязно, но если значение 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();
2 голосов
/ 27 января 2011

Вы не можете добавить свойство или поле в существующий класс или структуру, для которой у вас нет источника.Вам нужно будет создать собственную новую структуру для переноса дополнительных данных.

...