Групове використання делегатів у Visual C # (Sharp)

У прикладах з делегатом існує взаємно однозначне ставлення Але делегати по своїй суті здатні до групових взаємин Так, у прикладі з ітератором для обчислення поточної суми і максимального значення список обробляється в циклі лише один раз Далі наводиться модифікований код прикладу, в якому викликаються дві реалізації делегатів в одній ітерації List 1st = new List&ltint&gt { 1, 2, 3, 4 }

int runningTotal = 0

int maxValue = intMinValue

ProcessValue anonymous = new ProcessValue{ delegate(int value) {

runningTotal += value

})

anonymous += new ProcessValue( delegate(int value) {

if (value &gt maxValue) { maxValue = value

}

})

1stIterate(anonymous)

ConsoleWriteLine(&quotRunning total is (&quot + runningTotal + &quot)&quot) ConsoleWriteLine(&quotMaximum value is (&quot + maxValue + &quot)&quot)

Жирним шрифтом у прикладі виділені присвоювання і додавання реалізації делегата змінної Є лише одна змінна anonymous, яка при Вові з використанням нотації делегата представляє один виклик методу Середа виконання NET розуміє, що одна змінна може представляти множествеие реалізації делегатів і додає всі необхідні механізми для обробки групового звернення В результаті даного групового звернення метод iterat e () потрібно викликати тільки один раз, щоб виконати дві операції

Реалізація делегата видаляється з змінної за допомогою оператора – =

void RemoveDelegate( ProcessValue toRemove) { anonymous -= toRemove

}

Джерело: Гросс К С # 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>

*

*