更新 : 2007 年 11 月
TypeName |
UseEventsWhereAppropriate |
CheckId |
CA1030 |
カテゴリ |
Microsoft.Design |
互換性に影響する変更点 |
なし |
原因
パブリック、プロテクト、またはプライベートの各メソッド名が、次のいずれかで始まります。
AddOn
RemoveOn
Fire
Raise
規則の説明
この規則では、通常はイベントに使用される名前を持つメソッドを検出します。イベントは、オブザーバまたは発行/サブスクライブのデザイン パターンに従います。イベントは、あるオブジェクトの状態変化を他のオブジェクトに通知する必要がある場合に使用されます。明示的に定義された状態変化に応答してメソッドが呼び出される場合、メソッドはイベント ハンドラから呼び出す必要があります。メソッドを呼び出すオブジェクトは、メソッドを直接呼び出すのではなく、イベントを発生させる必要があります。
ボタンをクリックするなどのユーザー アクションによって、あるセグメントのコードを実行させる場合、ユーザー インターフェイス アプリケーションに共通するいくつかのイベント例があります。.NET Framework イベント モデルは、ユーザー インターフェイスに限定されません。状態変化を 1 つ以上のオブジェクトに通知する場合は、必ず使用します。
違反の修正方法
オブジェクトの状態が変化したときにメソッドが呼び出される場合、デザインを変更し、.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 イベント モデルに変更することによって上記の例を修正するクラスを次に示します。