2011-01-27 11 views
3

追加の情報をPointF(ベジェ曲線に沿った位置のtパラメータ)で保存する必要があります。Struct(PointF)を拡張する最も簡単な方法

このデータは簡単には再計算できませんので、ポイントを計算した時点で他のルーチンで使用するために、このデータをPointFで保存します。

私はPointFへの参照が何百もあるので、新しい置換クラスを作成する必要はないが、PointF構造体を1つの追加プロパティで「拡張」したいと考えていた。

クライアントコードは次のようになります:

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

が可能、この(またはこのようなもの)ですか?

答えて

2

を作成する必要があります。あなたは追加のデータを運ぶために独自の新しい構造体を作る必要があります。

+0

ない私が聞きたかった...しかし、私は思ったまさに。ありがとう! – Flipster

3

残念ですが、PointFは構造体です(既に述べたように)ので、拡張することはできません。

あなたはあなたがソースを持っていない既存のクラスまたは構造体へのプロパティまたはフィールドを追加することはできませんあなた自身のタイプ

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(); 
関連する問題