2013-01-07 31 views
5

Tôi đang mút, tạo ra một lớp học chung chung, và tất cả thời gian này tôi nghĩ sử dụng các loại đã triển khai thực hiện bằng cách sử dụng toán tử so sánh được kích hoạt IComparable.Có giao diện cho phép><và tất cả các toán tử so sánh khác không?

Tôi biết .CompareTo() có thể thực hiện các chức năng giống nhau nhưng tôi có cảm giác dai dẳng rằng phải có giao diện triển khai toán tử so sánh.

Trả lời

5

Không. Không thể chỉ định toán tử qua giao diện.

Interfaces xác định thuộc tính, phương pháp và sự kiện [nhưng không phải nhà khai thác] mà lớp học có thể triển khai.

Giao diện gần nhất, như đã nêu, là IComparable.

Một số ngôn ngữ có nhiều ánh xạ đường hơn (ví dụ: Scala) nhưng không phải VB.NET hoặc C#.

6

Thay vì thực hiện giao diện, điều này được thực hiện thông qua operator overloading. Vì vậy, để quá tải càng lớn hơn và ít hơn toán tử so sánh, ví dụ, bạn có thể làm một cái gì đó như thế này:

Public Class MyNumber 
    Public Value As Integer 

    Public Overloads Shared Operator >(ByVal x As MyNumber, ByVal y As MyNumber) As Boolean 
     Return (x.Value > y.Value) 
    End Operator 

    Public Overloads Shared Operator <(ByVal x As MyNumber, ByVal y As MyNumber) As Boolean 
     Return (x.Value < y.Value) 
    End Operator 
End Class 

Kể từ khi quá tải toán tử được định nghĩa là Shared, họ không thể được công bố bởi một giao diện. Giao diện trong VB.NET chỉ có thể khai báo các cá thể thành viên. Họ không thể khai báo thành viên được chia sẻ.

+1

Đó là AWESOME, @Steven - không biết điều đó là có thể !!! +1 –

+2

Đó là một mẹo hay, nhưng quá tải các toán tử không phải là một giải pháp vì tôi đang làm việc với Generics. Tôi đã không nhận ra 'static' /' Shared' chức năng không thể là một phần của giao diện mặc dù, tốt để biết. –

+1

@ j.i.h. Nếu đó là trường hợp, đó là những gì các giao diện như 'IComparable' là cho. Đó là lý do tại sao chúng tồn tại. Bạn chỉ cần đi qua giao diện để thực hiện thao tác so sánh, thật không may. –