У меня есть куча классов, у каждого из которых есть свойство Sequence. Это свойство реализовано из интерфейса под названием ISequenced. Для этого примера давайте назовем один из этих классов A.
Когда у меня есть List (of A), я хочу иметь возможность сортировать их, используя стандартный List.Sort (addressof Delegate), где делегат является стандартной функцией, которая принимает два объекта ISequenced, сравнивает их порядковые номера и возвращает логическое значение. флаг, а не объявление функции для каждого отдельного класса, который реализует ISequenced.
например.
Dim li as List(of A) = GetValues()
li.Sort(addressof SortBySeq)
...
Public Function SortBySeq(ByVal ob1 as ISequenced, ByVal ob2 as ISequenced) as Boolean
return ob1.Sequence.CompareTo(ob2.Sequence)
End If
РЕДАКТИРОВАТЬ: Использование выше дает мне следующую ошибку:
"Не удалось разрешить перегрузку, потому что нет
Доступный «Сортировать» можно вызвать с
эти аргументы:
«Public Sub Sort (сравнение как System.Comparison (Of A))»: опция
Строгое включение не допускает сужения в
неявные преобразования типов между
Метод 'Открытая функция SortBySeq (ob1
As2quenced, ob2 As ISequenced) Как
Целое число и делегат
Сравнение функций (Of A) (x As A, y As
А) Как целое число.
Public Sub Sort (сравнивать как System.Collections.Generic.IComparer (Of
A)) ':' AddressOf 'выражение не может быть
конвертировано в
«System.Collections.Generic.IComparer (Из
А) «потому что
«System.Collections.Generic.IComparer (Из
А) 'не является типом делегата. "
Как бы я объявил функцию, чтобы сделать это (если это вообще возможно в VB.NET?
Спасибо,
Дейн.