События довольно обыденные. Чаще всего вы будете использовать их в ответ на пользовательский интерфейс или при разработке компонентов, которые должны информировать пользователей об изменениях состояния. Йон.
Делегаты, однако, полны круто и побеждают. Вероятно, наиболее распространенное использование в Linq. Linq повсюду использует лямбды, которые являются сокращёнными делегатами.
var numbers = new int[]{1,2,3,4,5};
var evenStevens = numbers.Where(x => x % 2 == 0);
Другое распространенное использование в многопоточности:
ThreadPool.QueueUserWorkItem(o => DoWork(o));
Где я использовал их, что мне больше всего нравится, в методах расширения HtmlHelper, которые смешивают рендеринг html с codebehind:
/// <summary>
/// Helps render a simple list of items with alternating row styles
/// </summary>
/// <typeparam name="T">The type of each data item</typeparam>
/// <param name="html">The HtmlHelper.</param>
/// <param name="rows">The list of items</param>
/// <param name="rowTemplate">The row template.</param>
/// <param name="evenCssClass">The even row CSS class.</param>
/// <param name="oddCssClass">The odd row CSS class.</param>
public static void SimpleList<T>(
this HtmlHelper html,
IEnumerable<T> rows,
Action<T, string> rowTemplate,
string evenCssClass,
string oddCssClass)
{
var even = false;
foreach (var row in rows)
{
rowTemplate(row, even ? evenCssClass : oddCssClass);
even = !even;
}
}
пример его использования в файле aspx:
<div id="nodes" class="scrollingBlock">>
<% Html.SimpleList(
Model.Nodes,
(d, css) =>
{%>
<div class='<%=css%>'><%=d.Name %></div>
<%}, "evenRow", "oddRow");%>
</div>