Делегати в Visual C # (Sharp)

З самого початку в мові С # застосовувалася концепція делегатів Делегат – Це мод, який не має типу Розглянемо, наприклад, таке визначення типу:

interface IExample { void Method()

}

Якщо даний інтерфейс перетворити в делегата, то код буде виглядати так:

delegate void Method()

Делегати і інтерфейси грають однакову роль у тому, що вони є типами без реалізацій, застосовувані для створення компонентів Інтерфейс може мати множинні методи і властивості А делегат є оголошенням методу і мет визначати тільки параметри і які повертаються типи Делегати надають можливість визначення загального механізму для виклику методів, не вимагаючи при цьому виконання зайвої роботи по реалізації інтерфейсу

Для вирішення проблеми, представленої в попередньому розділі, можна застосувати підхід з використанням делегатів Для цього потрібно визначити функціональність для виконання операцій у циклі Така функціональність називаєтьсяітератом А для виконання операцій з ітератором допомогою делегата інтегрується інша функціональність В результаті у нас є дві окремі функціоналом, обєднані за допомогою застосування технології компонентів

Вихідний код попереднього прикладу для оператора foreach, модифікований із застосуванням делегатів, виглядатиме таким чином:

public delegate void ProcessValue(int value) public static class Extensions {

public static void Iterate(this ICollection&ltint&gt collection,

ProcessValue cb) { foreach (int element in collection) {

cb(element)

&gt&nbsp

}

}

static class Tests {  static int _runningTotal

static void ProcessRunningTotal(int value) {

_runningTotal += value             •

}

static int _maxValue

static void ProcessMaximumValue(int value) { if (value &gt _maxValue) {

_ maxValue = value

}

}

static void DoRunningTotalAndMaximum() { List&ltint&gt 1st = new List&ltint&gt { 1, 2, 3, 4 }

_runningTotal = 0

1stIterate(new ProcessValue(ProcessRunningTotal)) ConsoleWriteLine(&quotRunning total is (&quot + _runningTotal + &quot)&quot)

_maxValue = intMinValue

1stIterate(new ProcessValue(ProcessMaximumValue)) ConsoleWriteLine(&quotMaximum value is (&quot + _maxValue +&quot)&quot)

}

public static void RunAllO { DoRunningTotalAndMaximum()

}

}

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*