2010-02-11 38 views
7

Tôi có một lớp mở rộng cho System.Net.IPAddress và tôi đã muốn quá tải các toán tử nhị phân >, <, == nhưng trình biên dịch nói với tôi rằng tôi không thể quá tải các toán tử bên trong một lớp tĩnh, mà tôi phải có cho phần mở rộng khác của mình phương pháp. Có lý do cụ thể nào cho điều này không?Tại sao các toán tử không thể bị quá tải bên trong một lớp tĩnh?

Cảm ơn.

+0

Chúng tôi đã xem xét thêm "các toán tử mở rộng" vào C# 4, nhưng chúng không phù hợp với ngân sách và bị cắt. Hy vọng rằng chúng tôi sẽ đưa chúng vào một phiên bản tương lai giả định của ngôn ngữ. –

+0

@Eric: Tôi hy vọng bạn sẽ đưa chúng vào một phiên bản tương lai "thực"! :) Tôi đã nghe về lập trình chức năng, nhưng không phải là lập trình giả định! Đó có phải là một mô hình mới không? –

+0

@ Chris Dunaway: Vâng, bây giờ nó được gọi là "lập trình lượng tử" tốt hơn. – jason

Trả lời

12

Nhà điều hành phải liên quan đến các trường hợp thuộc loại được khai báo. Vì bạn không thể có các cá thể của một lớp tĩnh, nên không cần phải định nghĩa toán tử.

Không có "toán tử mở rộng" trong .NET.

Đối với mục đích của bạn, hãy xem xét thực hiện một IComparer<T> (bao gồm <>) và/hoặc IEqualityComparer<T> (bao gồm ==, hoặc bạn sức chỉ cần sử dụng so sánh trở 0, nó phụ thuộc vào việc bạn cân nhắc "phân loại bằng" và "bình đẳng" như nhau).

+0

Bạn thậm chí có Jon Skeet loại bỏ câu trả lời của mình –

+0

@Jan - tốt, tôi đã 50 giây trước đó quá ;-p –

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