Используйте события, если это уместно
Обновлен: Ноябрь 2007
TypeName |
UseEventsWhereAppropriate |
CheckId |
CA1030 |
Категория |
Microsoft.Design |
Критическое изменение |
Не критическое |
Причина
Имя открытого, защищенного или закрытого метода начинается со следующих лексем:
AddOn
RemoveOn
Fire
Raise
Описание правила
Данное правило отслеживает методы с именами, которые, как правило, используются для событий. События основаны на шаблоне разработки "Observer" или "Publish-Subscribe"; они используются в ситуациях, когда об изменении состояния одного объекта требуется сообщить другим объектам. Если метод вызывается в ответ на четко определенное изменение состояния, то этот вызов должен осуществляться с помощью обработчика событий. Объекты, вызывающие методы, должны создавать события, а не вызывать методы напрямую.
Некоторые наиболее распространенные события реализуются в приложениях пользовательского интерфейса, в которых действия пользователя, такие как нажатие кнопки, приводят к выполнению фрагмента кода. Модель событий .NET Framework не ограничивается пользовательскими интерфейсами; ее следует использовать во всех случаях, когда необходимо сообщить одному или нескольким объектам об изменении состояния.
Предотвращение нарушений
Если метод вызывается при изменении состояния объекта, следует изменить структуру кода и использовать модель событий .NET Framework.
Отключение предупреждений
Если метод не работает с моделью событий .NET Framework, предупреждения о нарушении данного правила следует отключить.
Пример
В следующем примере показан метод, которые пытается сообщить об изменении состояния (в данном случае о том, что его объявляющий тип Book был закрыт) посредством вызова делегата.
using System;
namespace Samples
{
public delegate void ClosedCallback(Book book);
public class Book
{
private ClosedCallback _ClosedCallback;
// Violates this rule
public void AddOnClosed(ClosedCallback callback)
{
_ClosedCallback = callback;
}
public void Close()
{
_ClosedCallback(this);
}
}
}
В следующем классе предыдущий пример исправляется за счет использования модели событий платформы .NET Framework.