Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 семестр / Учебники / Все лекции С# / Все лекции С# / Лекция 22. Классы-прототипы. Параметризованные коллекции.doc
Скачиваний:
158
Добавлен:
24.02.2016
Размер:
72.19 Кб
Скачать

Обобщенные методы

Иногда требуется иметь отдельный метод, параметризованный каким-либо типом данных. Примером такого метода может служить метод сортировки данных. В примере приведена сортировка методом выбора.

Алгоритм ее состоит в том, что сначала выбирается наименьший элемент массива и меняется местами с первым элементом. Затем просматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом и так далее. Всего произведено будет n-1 замен. На последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication4

{

class Program

{

Параметризованный (обобщенный) метод Sort с параметром- типом данных.

На данный метод накладывается ограничение – объекты можно сравнивать друг с другом с помощью метода CompareTo

static void Sort<T>(ref T[] a) where T : IComparable<T>

{

T buf;

int n = a.Length;

for (int i = 0; i < n; i++)

{

int im = i;

for (int j = i + 1; j < n; j++)

if (a[j].CompareTo(a[im]) < 0) im = j;

buf = a[i]; a[i] = a[im]; a[im] = buf;

}

}

static void Main(string[] args)

{

int[] a = { 1, 6, 4, 2, 7, 5, 3 };

//вызов метода Sort с явным указанием параметра-типа

Sort<int>(ref a);

foreach (int x in a) Console.WriteLine(x);

double[] b = { 1.1, 6.6, 4.4, 2.4, 7.6, 5.5, 3.3 };

//вызов метода Sort без указания параметра типа

// компилятор по типу переданного параметра определяет какой тип //используется

Sort(ref b);

foreach (double x in b) Console.WriteLine(x);

string[] s = { "sdef", "sd", "sdfsd", "sdf" };

Sort(ref s);

foreach (string x in s) Console.WriteLine(x);

Console.ReadKey();

}

}

}

Преимущества использования параметризованных классов и методов:

  • описывают способы хранения и алгоритмы обработки данных независимо от типов данных

  • выполняют контроль типов во время компиляции, а не исполнения программы

  • увеличивают скорость обработки данных за счет исключения операций преобразования, упаковки и распаковки типов.