русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Узагальнені методи


Дата додавання: 2015-01-08; переглядів: 1355.


 

Іноді зручно мати окремий метод, який параметризується яким-небудь типом даних. Розглянемо цей випадок на прикладі методу сортування.

Відомо, що “самого кращого” алгоритму сортування не існує. Стандартні методи сортування реалізують алгоритми, які хороші для більшості застосувань, але не для всіх, тому може виникнути необхідність реалізувати власний метод.

У лістингу 13.4 приведений приклад сортування методом вибору. Алгоритм полягає в тому, що спочатку вибирається найменший елемент масиву і міняється місцями з першим елементом, потім є видимими елементи, починаючи з другого, і найменший з них міняється місцями з другим елементом, і т. д., всього n - 1 раз. На останньому проході циклу при необхідності міняються місцями попередній і наступний елементи масиву.

 

Лістинг 13.4. Сортування вибором

 

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplicationl

{

class Program

{

static void Sort<T> ( ref T[] a ) // 1

where T : IComparable<T> // 2

{

T buf;

int n = a.Length;

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

{

int im = i;

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

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

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

}

}

static void Main()

{

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

Sort<int>(ref a); // 4

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

double[] b = { 1.1, 5.2, 5.21, 2, 7, 6, 3 };

Sort( ref b ); // 5

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

string[] s = { "qwe", "qwer", "df", "asd" };

Sort( ref s ); // 6

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

}

}

}

 

Параметризовані типи і методи дозволяють:

· описувати способи зберігання і алгоритми обробки даних незалежно від типів даних;

· виконувати контроль типів під час компіляції, а не виконання програми;

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

Як уже згадувалося, окрім класів-прототипів і узагальнених методів можна описати параметризовані інтерфейси, структури і делегати.

За допомогою параметризованих інтерфейсів можна визначити список функцій, які можуть бути реалізовані різним чином для різних класів, що реалізовують ці інтерфейси. Параметризовані інтерфейси можна реалізовувати в класі-прототипі, використовуючи як аргументи інтерфейсу параметри типу, що реалізовує інтерфейс, або в звичайному класі, підставляючи як параметри інтерфейса конкретні типи.

Параметризуючі делегати, дозволяють створювати узагальнені алгоритми, логіку яких можна змінювати передаючими параметри.


<== попередня лекція | наступна лекція ==>
Створення класу-прототипу | Часткові типи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн