2012-05-19 2 views
6

+ 연산자를 Point 개체에 사용할 수있는 방법이 있습니까?두 개의 점을 서로 추가하면서 + 연산자를 만드는 방법은 무엇입니까?

포획, 예를 들어,이 작은 조각 : 당신이 볼

this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location); 

, 나는 서로에 두 점을 추가하려고합니다. 단지 작동하지 않습니다 (이는 예상 됨). 나는이 일을하고 싶다.

아이디어가 있으십니까?

+0

'Point'객체 란 무엇입니까? 정확하게? 어떤 네임 스페이스에서? 그것은 당신 자신의 유형입니까? 추가 결과가 무엇을 기대합니까? – Oded

+0

시도해 보셨습니까 this.cm1.Show ((MouseEventArgs) e). 위치 + this.i_rendered.Location); – Blablablaster

+0

@Oded -> System.Drawing.Point – Tgys

답변

7

예상대로 진행되지 않습니다. Point 구조가 + (추가) 연산자에 제공하는 유일한 과부하는 one that translates the coordinates of the Point by a Size입니다.

두 개의 Point 구조를 함께 추가 할 방법이 없으며 그 의미가 무엇인지 확신 할 수 없습니다.

you cannot write extension methods that overload operators을 고려하면 너무 많은 시간을 낭비하지 마십시오.

다행히도 컴파일 된 언어에서는 코드를 여러 줄로 나눌 필요가 없습니다.

Point newLocation = new Point(e.Location.X + this.i_rendered.Location.X, 
           e.Location.Y + this.i_rendered.Location.Y); 
this.cm1.Show(newLocation); 

을 또는 당신이 Offset method 사용할 수 있습니다,하지만 난 가독성을 향상 확신 아니에요 : 그래서 다음과 같이 당신은 당신의 코드를 다시 작성할 수 있습니다.

+0

정말 슬픈 일인데 슬프다. 나는 그때 그 길을 갈 것 같아요, 그것은 적어도 읽을 수있는 것이 가장 좋습니다. - 감사 :). – Tgys

+0

내 대답을 확인하십시오. 아마 'Size'에 두 번째 가중치를 넣을 필요가 있을까요? –

6

System.Drawing.Point (Cody Gray의 답변에 링크 됨)에 대한 설명서를 읽고 인스턴스 메서드 Offset이 있습니다. 이 메서드는 현재 Point을 변형합니다 (디자이너는 Point을 가변 구조체로 변경했습니다!). 나는 또한 Point에서 Size에 명시 적 변환을 참조 같은 문서에서

var p1 = new Point(10, 20); 
var p2 = new Point(6, 7); 
p1.Offset(p2); // will change p1 into the sum! 

:

그래서 여기에 예입니다. 따라서 다음을 시도해보십시오.

var p1 = new Point(10, 20); 
var p2 = new Point(6, 7); 
Point pTotal = p1 + (Size)p2; // your solution? 
+1

두 번째 스 니펫은 어느 정도 닫힙니다. 그렇지만 끔찍하게 혼란스럽게 보입니다. 나는 코디 그레이의 대답이이 경우에 적용하기에 가장 쉽고 가장 명확한 해결책이라고 생각한다. – Tgys

관련 문제