2012-05-19 21 views
6

Có cách nào để nhà điều hành + hoạt động cho đối tượng Điểm không?Cách làm cho toán tử + hoạt động trong khi thêm hai Điểm cho nhau?

Lấy ví dụ, đoạn mã nhỏ này:

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

Bạn thấy đấy, tôi cố gắng thêm hai điểm eachother. Nó chỉ không hoạt động (được mong đợi). Tôi rất muốn làm việc này.

Bất kỳ ý tưởng nào?

+0

Bạn đang nói về đối tượng 'Point' nào? Chính xác? Trong không gian tên nào? Đây là loại của riêng bạn? Bạn mong đợi kết quả bổ sung là gì? – Oded

+0

Bạn đã thử this.cm1.Show (((MouseEventArgs) e) .Location + this.i_rendered.Location); – Blablablaster

+0

@Oded -> System.Drawing.Point – Tgys

Trả lời

7

Nó sẽ không xảy ra theo cách bạn mong đợi. Sự quá tải duy nhất mà cấu trúc Point cung cấp cho nhà điều hành + (bổ sung) là one that translates the coordinates of the Point by a Size.

Không có cách nào để thêm hai cấu trúc Point cùng nhau và tôi thậm chí không chắc chắn điều đó có ý nghĩa gì.

Đừng lãng phí quá nhiều thời gian để tìm ra, hoặc xem xét rằng you cannot write extension methods that overload operators.

May mắn thay, bằng ngôn ngữ được biên dịch, không có hình phạt nào khi chia nhỏ mã thành nhiều dòng. Vì vậy, bạn có thể viết lại mã của mình như sau:

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

Hoặc, bạn có thể sử dụng Offset method, nhưng tôi không tin rằng tăng cường khả năng đọc.

+0

Awww buồn rằng nó không thực sự có thể. Tôi đoán tôi sẽ đi theo cách đó sau đó, nó ít nhất là dễ đọc nhất. - Cảm ơn :). – Tgys

+0

Kiểm tra câu trả lời của tôi. Có lẽ bạn chỉ cần bỏ phần bổ sung thứ hai vào 'Kích thước'? –

6

Tôi đã đọc tài liệu cho System.Drawing.Point (được liên kết trong câu trả lời của Cody Gray) và có phương thức thể hiện Offset. Phương pháp đó làm thay đổi hiện tại Point (các nhà thiết kế đã chọn để làm cho Point một cấu trúc có thể thay đổi!).

Vì vậy, đây là một ví dụ:

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

Trong doc cùng tôi cũng thấy một chuyển đổi rõ ràng Point-Size. Do đó, hãy thử cách này:

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

Đoạn mã thứ hai có phần gần gũi, vâng, tuy nhiên, có vẻ khó hiểu. Tôi nghĩ câu trả lời của Cody Gray là dễ nhất và giải pháp rõ ràng nhất để áp dụng trong trường hợp này. – Tgys