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




Практический пример: специализированная сортировка - часть 3


Return (firstString <- secondString)

End Function

Public Shared Function TheSpecialCompare(ByVal firstString As String.

ByVal secondString As String)As Boolean Dint tokensl,tokens2 As String()

tokensl = firstString.Split(Chr(32))

tokens2 = secondString.Split(Chr(32))

Return (tokensl(l) <- tokens2(l))

' Сравнение по фамилии!

End Function

End Class

Класс содержит две общие функции, которые ниже будут использованы для создания делегатов. Первая функция, TheBasicCompare, просто сравнивает строки в алфавитном порядке. Более интересная функция TheSpecialCompare предполагает, что строка передается в формате «имя фамилия», и сравнивает фамилии, выделяя их при помощи удобной функции Split.

Остается лишь создать экземпляры класса SpecialSort и делегаты. Это происходит в следующей функции Main (ключевые строки выделены жирным шрифтом):

1 Module Modulel

2 Sub Main()

3 Dim test()As String ={"Mike Iem"."Dave Mendlen"."Alan Carter".

4 "Tony Goodhew","An Bixhorn"."Susan Warren"}

5 ' Объявить переменную обратного вызова в форме класс.делегат

6 Dim MyCallBack As Special Sort.SpecialCompareCal1back

7 MyCallBack = AddressOf MyCustomCompare.TheBasicCompare

8 SpecialSort.MySort(test,MyCallBack)

9 Console.WriteLine("Here is a basic sort by FIRST name")

10 Dim temp As String

11 For Each temp In test

12 Console.WriteLine(temp)

13 Next

14 ' Передать другую процедуру сравнения

15 MyCallBack = AddressOf MyCustomCompare.TheSpecialCompare

16 Sped al Sort. MySort (test. MyCallBack)

17 Console.WriteLine()

18 Console.WriteLineC'Here is a sort by LAST name")

19 For Each temp In test

20 Console.WriteLine(temp)

21 Next

22 Console. ReadLine()

23 End Sub

24 End Module

В строке 6 объявляется «псевдоуказатель на функцию». Чтобы задать его значение, мы передаем адрес функции с правильной сигнатурой (строки 7-15). Поскольку функции объявлены общими, создавать экземпляр класса MyCustomCompare для этого не нужно.После создания делегата в строках 8 и 16 вызывается нужная процедура сортировки класса Special Sort. Поскольку при вызове MySort передается делегат, процедура обращается к классу MyCustomCompare и узнает, по какому критерию должно осуществляться сравнение.




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