を同じシグネチャを持つ必要があります。 .NETでは、イベントは慣例によって特別な署名を持つ代理人に過ぎません。ここでクラスのイベントを宣言のC#の例である:送信者がイベントを発生させたとのEventArgsは、任意の情報を符号化対象である
public delegate EventHandler(object sender, EventArgs e);
:
public class MyObject
{
// ...
public event EventHandler ProcessingComplete;
// ...
}
EventHandlerは二つのパラメータを持つデリゲートでありますイベントのサブスクライバに渡す必要があります。
すべてのイベントはこの規約に従うことが期待されます。あなたのイベントに特化した情報を伝えたい場合は、EventArgsから派生した独自のクラスを作成することができます。 .NETは、この目的のために一般的に型付けされたEventHandlerデリゲートを定義します。EventHandler<TEventArgs>
。 C#の例:
class ProcessingCompleteEventArgs : EventArgs
{
public ProcessingCompleteEventArgs(int itemsProcessed)
{
this.ItemsProcessed = itemsProcessed;
}
public int ItemsProcessed
{
get;
private set;
}
}
// ...
// event declaration would look like this:
public event EventHandler<ProcessingCompleteEventArgs> ProcessingComplete;
、イベントをサブスクライブ+=
演算子を使用します。退会するには、-=
演算子を使用します。あなたのクラスの中
void Start()
{
this.o = new MyObject();
this.o.ProcessingComplete += new EventHandler(this.OnProcessingComplete);
// ...
}
void Stop()
{
this.o.ProcessingComplete -= new EventHandler(this.OnProcessingComplete);
}
void OnProcessingComplete(object sender, EventArgs e)
{
// ...
}
、イベントを発生するために、あなたは、デリゲートを呼び出すために通常の構文を使用することができます。
void Process()
{
// ...
// processing is done, get ready to fire the event
EventHandler processingComplete = this.ProcessingComplete;
// an event with no subscribers is null, so always check!
if (processingComplete != null)
{
processingComplete(this, EventArgs.Empty);
}
}