Вы упоминали, что видели синтаксис добавления / удаления для событий в некоторых примерах пользовательских элементов управления.Скорее всего, эти примеры используют свойство UserControl
class 'Events
для хранения обработчиков событий, например, в следующем примере:
public event EventHandler MyEvent
{
add
{
Events.AddHandler("MyEvent", value);
}
remove
{
Events.RemoveHandler("MyEvent", value);
}
}
Идея заключается в том, что обычнопотребитель элемента управления не захочет обрабатывать каждое отдельное событие, предоставляемое элементом управления.Если каждое событие определено как событие «поля» (как в вашем примере), то каждое событие будет занимать часть памяти, даже если для этого события нет подписчиков.Если у вас сложная страница, состоящая из сотен элементов управления, каждый из которых может содержать десятки событий, потребление памяти для неиспользуемых событий не будет незначительным.
Именно поэтому класс System.ComponentModel.Component
(базовый класскласс System.Windows.Forms.Control
) имеет свойство Events
, которое представляет собой словарь для хранения делегатов обработчиков событий.Таким образом, каждое событие реализовано больше как свойство, чем поле.Обработчики добавления / удаления для каждого хранилища событий или удаления делегатов из словаря Events
.Если событие не используется, то в словаре Events
для него просто нет записи, и для этого события не используется дополнительная память.Это компромисс, заключающийся в том, что нужно немного больше работать (нужно искать обработчик событий), чтобы сэкономить немного больше памяти.
РЕДАКТИРОВАТЬ: исправлен мой ответ, относящийся к Windows Forms, а не к ASP.NET, хотяпонятия одинаковы.