3

PointF(ベジェ曲線に沿った位置のtパラメーター)を使用して、追加の情報を1つ保存する必要があります。

このデータは簡単に再計算できないので、他のルーチンで使用するために、ポイントの計算時にPointFと一緒に保存したいと思います。

PointFへの参照は何百もあるので、新しい置換クラスを作成する必要はなく、1つの追加プロパティを使用して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

ソースがない既存のクラスまたは構造体にプロパティまたはフィールドを追加することはできません。追加のデータを運ぶには、独自の新しい構造体を作成する必要があります。

于 2011-01-27T03:01:46.587 に答える
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();
于 2011-01-27T12:21:03.753 に答える