在适用处使用事件

更新:2007 年 11 月

TypeName

UseEventsWhereAppropriate

CheckId

CA1030

类别

Microsoft.Design

是否重大更改

原因

公共、受保护或私有方法的名称不能以下列单词之一开头:

  • AddOn

  • RemoveOn

  • Fire

  • Raise

规则说明

该规则检测名称通常用于事件的方法。事件遵循“观察者”或“发布-订阅”设计模式;当需要与其他对象交流一个对象的状态更改时使用这些事件。如果为响应明确定义的状态更改而调用一个方法,则应由事件处理程序调用该方法。调用该方法的对象应引发事件而不是直接调用该方法。

在单击按钮等用户操作会导致执行一段代码的用户界面应用程序中,可以找到事件的某些常见示例。.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 事件模型修复了上面的示例。