2010-05-19 28 views

Trả lời

11

Bạn không thể quá tải rõ ràng các toán tử gán nhiệm vụ. Tuy nhiên, bạn có thể quá tải toán tử chính và trình biên dịch mở rộng nó.

x += 1 hoàn toàn là cú pháp đường cho x = x + 1 và sau đó là nội dung sẽ được dịch sang. Nếu bạn quá tải toán tử +, nó sẽ được gọi.

MSDN Operator Overloading Tutorial

public static Complex operator +(Complex c1, Complex c2) 
{ 
    return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); 
} 
+0

đây là một bài viết hay về chủ đề của các toán tử quá tải trong C#: http://www.informit.com/articles/article.aspx?p=101373&seqNum=15 – vitorbal

+0

Tôi biết nó có thể bị quá tải theo cách đó, tôi chỉ muốn một ví dụ mã rất đơn giản. Bất kỳ ai? – chris12892

+0

Cảm ơn, đó là chính xác những gì tôi cần – chris12892

2

Bạn không thể quá tải các toán tử đó trong C#.

+2

Bài đăng của Stephan cho biết bạn có thể. Tất nhiên bạn không thể ghi đè nó trực giao từ toán tử +, nhưng hey, về mặt kỹ thuật có thể. – dss539

+0

@ dss539 - Chắc chắn là gián tiếp. Tôi chỉ trả lời câu hỏi của anh ấy. –

+0

@ dss539 - Đó là "kỹ thuật có thể"? Nếu bất cứ điều gì, "về mặt kỹ thuật có thể" là chính xác những gì nó không phải là. –

4

Theo C# đặc điểm kỹ thuật, + = không có trong danh sách các nhà khai thác overloadable. Tôi giả định, điều này là bởi vì nó là một nhà điều hành chuyển nhượng là tốt, mà không được phép để có được quá tải. Tuy nhiên, không giống như được nêu trong các câu trả lời khác ở đây, 'x + = 1' là không phảicùng một là 'x = x + 1'. Đặc tả C#, "7.17.2 Phân công hợp chất" rất rõ ràng về điều đó:

... the operation is evaluated as x = x op y, except that x is evaluated only once 

Phần quan trọng là phần cuối cùng: x chỉ được đánh giá một lần. Vì vậy, trong các trường hợp như thế này:

A[B()] = A[B()] + 1; 

nó có thể (và không) tạo sự khác biệt, cách xây dựng câu lệnh của bạn. Nhưng tôi cho rằng, trong hầu hết các trường hợp, sự khác biệt sẽ không đáng kể. (Ngay cả khi tôi vừa mới bắt gặp nó, nó không ở đâu.)

Câu trả lời cho câu hỏi là: người ta không thể ghi đè toán tử + =. Đối với các tình huống, trong đó ý định có thể thực hiện được thông qua các toán tử nhị phân đơn giản, người ta có thể ghi đè toán tử + và lưu trữ một mục tiêu tương tự.

Các vấn đề liên quan