
Обобщенные методы
Иногда требуется иметь отдельный метод, параметризованный каким-либо типом данных. Примером такого метода может служить метод сортировки данных. В примере приведена сортировка методом выбора.
Алгоритм ее состоит в том, что сначала выбирается наименьший элемент массива и меняется местами с первым элементом. Затем просматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом и так далее. Всего произведено будет 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();
}
}
}
Преимущества использования параметризованных классов и методов:
описывают способы хранения и алгоритмы обработки данных независимо от типов данных
выполняют контроль типов во время компиляции, а не исполнения программы
увеличивают скорость обработки данных за счет исключения операций преобразования, упаковки и распаковки типов.