Основы программирования на C#


Делегаты как свойства - часть 3


Добавим классический для контейнеров набор методов - добавление нового элемента, загрузка элементов из базы данных и печать элементов:

public void AddPerson(Person pers) { if(freeItem < n) { Person p = new Person(pers); persons[freeItem++]= p; } else Console.WriteLine("Не могу добавить Person"); } public void LoadPersons() { //реально загрузка должна идти из базы данных AddPerson(new Person("Соколов",123, 750.0)); AddPerson(new Person("Синицын",128, 850.0)); AddPerson(new Person("Воробьев",223, 750.0)); AddPerson(new Person("Орлов",129, 800.0)); AddPerson(new Person("Соколов",133, 1750.0)); AddPerson(new Person("Орлов",119, 750.0)); }//LoadPersons public void PrintPersons() { for(int i =0; i<freeItem; i++) { Console.WriteLine("{0,10} {1,5} {2,5}", persons[i].Name, persons[i].Id, persons[i].Salary); } }//PrintPersons

Конечно, метод LoadPerson в реальной жизни устроен по-другому, но в нашем примере он свою задачу выполняет. А теперь определим метод сортировки записей с функциональным параметром, задающим тот или иной способ сравнения элементов:

//сортировка public void SimpleSortPerson(CompareItems compare) { Person temp = new Person(); for(int i = 1; i<freeItem;i++) for(int j = freeItem -1; j>=i; j--) if (compare(persons[j],persons[j-1])==-1) { temp = persons[j-1]; persons[j-1]=persons[j]; persons[j] = temp; } }//SimpleSortObject }//Persons

Единственный аргумент метода SimpleSortPerson принадлежит классу CompareItems, заданному делегатом. Что касается метода сортировки, то реализован простейший алгоритм пузырьковой сортировки, со своей задачей он справляется. На этом проектирование классов закончено, нужная цель достигнута, показано, как можно в классе экземпляры делегатов задавать как свойства. Для завершения обсуждения следует продемонстрировать, как этим нужно пользоваться. Зададим, как обычно, тестирующую процедуру, в которой будут использоваться различные критерии сортировки:

public void TestSortPersons() { Persons persons = new Persons(); persons.LoadPersons(); Console.WriteLine (" Сортировка по имени: "); persons.SimpleSortPerson(Person.SortByName); persons.PrintPersons(); Console.WriteLine (" Сортировка по идентификатору: "); persons.SimpleSortPerson(Person.SortById); persons.PrintPersons(); Console.WriteLine (" Сортировка по зарплате: "); persons.SimpleSortPerson(Person.SortBySalary); persons.PrintPersons(); Console.WriteLine (" Сортировка по зарплате и имени: "); persons.SimpleSortPerson(Person.SortBySalaryName); persons.PrintPersons(); }//SortPersons

Результаты работы сортировки данных изображены на рис. 20.5.

Сортировка данных

Рис. 20.5.  Сортировка данных




Начало  Назад  Вперед