2010-05-20 5 views
2

Point 개체를 사용하여 그래프를 그리기 때문에이 매개 변수로 double을 지원하기 때문에 을 설정하려고합니다. Visual C#, WindowsConsoleApplication에서 작업 중입니다.C#에서 Point 객체를 오버로드하여 double을 지원할 수 있습니까?

감사합니다.

+0

나는 1600 만 픽셀의 와이드 스크린을 가지고 있기 때문에 플로트가 가진 정밀도를 다 써 버렸지 만, 콘솔 어플리케이션의 그래픽 작업을하는 것으로 나타났습니다. –

답변

1

내장 된 Point 구조체는 int를 사용하고 PointF은 float를 사용하지만 사용자가 double을 사용하여 직접 만들 수 있습니다.

+0

그리고 필요한 경우 내장 된 Point로 다시 변환하십시오. – Steven

+0

Nitpick : 구조가 아니라 클래스입니다. 그것은 또한 변경할 수 있습니다, 어떤 IMO는 OP가 자신을 만들면 피해야합니다 ... –

+0

Thanks @Jon, now fixed. –

6

PointF 만 사용할 수 있습니다. 모두 System.Drawing은 부동 소수점 연산을 지원합니다. 왜 그걸 사용하지 않니? 그렇지 않으면 실제로 double을 사용하여 정수 드로잉 함수에 전달하려는 경우 사용자 고유의 구조를 만들어야합니다. 이 효과에 뭔가 : 당신이 Point의 소스 메타 데이터를 보라 경우는 (정의로 이동하여), 매우 잘립니다 구현

struct MyPoint { 
public double X{get;set;} 
public double Y{get;set;} 

public MyPoint(double x, double y) { 
    X = x; 
    Y = y; 
} 

public implicit operator Point() { 
    return new Point(X, Y); 
} 
} 

, 당신은 당신이 구현하는 데 필요한 모든 재정 및 운영자를 볼 수 있습니다.

또한 주목할 점은 Point은 암시 적으로 PointF으로 변환 될 수 있지만 그 반대는 아닙니다. 잠재적 인 정밀도의 손실로 인해 지원되지 않습니다. 내가 너라면, API 설계자의 최상의 사용 관행에 어긋나는 것처럼 보이기 때문에 디자인을 다시 생각해 보겠다.

+0

MS가 PointD (Point의 이중 버전)를 만드는 이유는 무엇입니까? –

0

아니요, 포인트 객체를 오버로드 할 수 없습니다.

포인트는 기본적으로 구조이므로 과부하를 지원하지 않습니다.

고유 한 클래스를 만드는 것이 지점과 동일한 방식으로 작동하는 것이 좋습니다.

희망이 도움이 될 것입니다!

관련 문제