2011-01-27 7 views
3

우리는 추가 정보를 PointF (베 지어 커브를 따라 위치의 t 매개 변수)와 함께 저장해야합니다.Struct (PointF)를 확장하는 가장 쉬운 방법

이 데이터는 쉽게 다시 계산할 수 없기 때문에 다른 루틴에서 사용하기 위해 점을 계산할 때 PointF에 저장하려고합니다.

우리는 PointF에 대한 수백 개의 참조를 가지고 있으므로 새로운 대체 클래스를 만들지 않아도되지만 하나의 추가 속성으로 PointF 구조체를 "확장"하고 싶습니다. 같은

클라이언트 코드가 될 것이다 일 :

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

(이 같은 또는 아무것도)이 가능합니까?

답변

2

을 확인해야합니다 당신은 기존 클래스에 속성이나 필드를 추가하거나 소스를이없는 구조체 수 없습니다. 추가 데이터를 전달하기 위해 자신 만의 새로운 구조체를 만들어야합니다.

+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]; } } 

그럼 당신은이 같은이 방법을 사용할 수 있습니다. 감사! – Flipster

3

죄송합니다. PointF는 구조체이므로 (이미 말했듯이) 확장 할 수 없습니다.

당신은 당신의 자신의 종류

2

다소 더러 우긴하지만 주어진 PointF에 대해 T 값이 항상 동일하면 확장 메소드를 사용하여 속성에서 제공하는 get/set 동작을 시뮬레이트 할 수 있습니다. C# 3.0 컴파일러를 사용한다고 가정하면 이와 같은 작업을 수행 할 수 있습니다. 내가 듣고 싶어하지 무엇

PointF pf = new PointF(4.0F, 5.0F); 
pf.SetT(42); 
float t = pf.GetT(); 
관련 문제