2012-04-23 39 views
6

Tại sao các toán tử gán (+ =, - =, * =,/=) quá tải trong VB.NET?Tại sao các toán tử gán quá tải trong VB.NET?

+0

@ Mr.Disappointment - Yup, phát hiện ra rằng bản thân mình. Bạn có thể chỉ ra nơi trong bài viết đó nó nói lý do tại sao các toán tử gán không quá tải? – user1351569

+0

@ Mr.Disappointment - Nghĩ rằng bạn có thể đã đọc một điều tôi đã bỏ lỡ. – user1351569

+0

Đã thêm một số nội dung về trình chuyển đổi ẩn/rõ ràng có thể trợ giúp với bất kỳ điều gì bạn có thể đang cố gắng thực hiện. – Alain

Trả lời

10

lẽ this là lập luận của họ:

Cảm ơn đã gợi ý! Chúng tôi không cho phép bạn quá tải toán tử gán cho một loại vì hiện tại không có cách nào để đảm bảo rằng các ngôn ngữ khác hoặc Khuôn khổ .NET sẽ tôn vinh toán tử gán. Cách thay thế duy nhất là hạn chế những loại mà quá tải toán tử gán có thể làm, nhưng chúng tôi cảm thấy rằng điều này sẽ quá hạn chế để có thể hữu ích nói chung.

Cảm ơn! Paul Vick lãnh đạo kỹ thuật, VB

Có điều gì đó gọi là 'Thu hẹp' và 'Mở rộng' cho phép bạn xác định chuyển đổi ngầm và rõ ràng từ loại này sang loại khác, ví dụ:

Dim y as MyClass1 
Dim x as MyClass2 = y 

Nhưng điều đó không hãy thay đổi toán tử gán để gán một thể hiện của cùng một lớp, chỉ chuyển đổi các lớp khác.

Xem How to: Define a Conversion Operator

Class MyClass1 
    Public Shared Widening Operator CType(ByVal p1 As MyClass1) As MyClass2 

    End Operator 
End Class 

Same in C#

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

khai thác Chuyển nhượng không thể bị quá tải, nhưng + =, ví dụ, được đánh giá sử dụng +, có thể bị quá tải .

=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof

Những nhà khai thác không thể bị quá tải.

Với cùng conversion operators:

struct MyType1 
{ 
    ... 
    public static explicit operator MyType1(MyType2 src) //explicit conversion operator 
    { 
     return new MyType1 { guts = src.guts }; 
    } 
} 
+0

Vé bị đóng là "Không khắc phục" trong năm 2004 - rofl. Đây là hy vọng họ đã xem xét lại đề xuất. – Alain

+0

Có phải không? http://stackoverflow.com/questions/292676/is-there-a-workaround-for-overloading-the-assignment-operator-in-c – Alain

+1

C# không hỗ trợ quá tải của nhà điều hành: http://msdn.microsoft. com/vi-us/library/8edha89s.aspx.Cách giải quyết ish là quá tải toán tử '+', vì + = sử dụng nó, nhưng bạn vẫn không thể quá tải '='. – Alain

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