共用方式為


適當地使用事件

更新:2007 年 11 月

TypeName

UseEventsWhereAppropriate

CheckId

CA1030

Category

Microsoft.Design

Breaking Change

Non Breaking

原因

public、protected 或 private 方法名稱是以下列其中一個項目做為開頭:

  • AddOn

  • RemoveOn

  • Fire

  • Raise

規則描述

此規則會偵測具有事件常用名稱的方法。事件是依照「觀察者」或「發行-訂閱」的設計模式,當必須將一個物件的狀態變更傳送至其他物件時,就會使用事件。如果方法因回應清楚定義的狀態變更而被呼叫,應該由事件處理常式叫用 (Invoke) 該方法。呼叫方法的物件應該要引發事件,而不是直接呼叫方法。

使用者介面應用程式中的一些常見事件範例,像是利用使用者動作 (例如按一下按鈕) 執行程式碼區段。.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 事件模型修正上面的範例。