Иллюстрированный самоучитель по VB.NET




IComparable


Предположим, коллекцию объектов Employee потребовалось отсортировать по заработной плате. Конечно, операцию сортировки было бы удобно реализовать непосредственно в классе Emplоуее, чтобы сортировка простого или динамического массива объектов этого класса выполнялась так же просто, как сортировка строковых массивов. Оказывается, порядок сортировки элементов, используемый методом Sort классов Array и ArrayList, определяется интерфейсом IComparable (строковые массивы интерфейс IComparabl e сортирует в порядке ASCII-кодов). Интерфейс состоит из единственного метода CompareTo: Function CompareTo(ByValobj As Object) As Integer Метод возвращает следующие значения:

  • отрицательное число, если текущий экземпляр меньше заданного объекта;
  • ноль, если текущий экземпляр равен заданному объекту;
  • положительное число, если текущий экземпляр больше заданного объекта.

    Следующая версия класса Employee реализует интерфейсы lEnumerable и IComparable и сортирует массив по убыванию заработной платы:

    Public Class Employee

    Implements IComparable

    Private m_Name As String

    Private m_Salary As Decimal

    Private Const LIMIT As Decimal =0.10

    Public Sub New(ByVal theName As String,ByVal curSalary As Decimal)

    m_Name = theName m_Salary = curSalary

    End Sub

    Public Function CompareTo(ByVal anEmployee As Object) As Integer _

    Implements IComparable.CompareTo

    If CType(anEmployee,Employee).Salany < Me.Salary Then Return -1

    El self CTypetanEmployee.Employee).Salary = Me.Salary Then

    Return 0

    Elself CTypeCanEmployee,Employee).Salary > Me.Salary Then

    Return 1

    End If

    End Function

    Public Readonly Property TheName() As String Get

    Return m_Name End Get End Property

    Public Readonly Property Salary() As Decimal Get

    Return MyClass.m_Salary

    End Get End Property

    Public Overridable Overloads Sub RaiseSalary(ByVal Percent As Decimal)

    If Percent > LIMIT Then

    ' Операция запрещена - необходим пароль

    Console.WriteLine("NEED PASSWORD TO RAISE SALARY MORE " & _




    Содержание  Назад  Вперед