| イベント発生側 | イベント処理側 | |
|---|---|---|
| C++/CLI |
delegata void SampleEventHandler();
ref class Publisher
{
event SampleEventHandler^ SampleEvent;
void Func1()
{
|
ref class Subscriber
{
Publisher^ publisher;
void Func2()
{
publisher = gcnew Publisher();
publisher->SampleEvent
+= gcnew SampleEventHandler(this, &Subscriber::Callback);
}
void Callback() {}
};
|
| C# |
delegata void SampleEventHandler();
class Publisher
{
event SampleEventHandler SampleEvent;
void Func1()
{
if( SampleEvent != null ) // ※1
{
// イベントの発生
SampleEvent();
}
}
}
|
class Subscriber
{
Publisher publisher;
void Func2()
{
publisher = new Publisher();
publisher.SampleEvent
+= new SampleEventHandler(Callback);
}
void Callback() {}
}
|
| Java |
※1 C#では、イベントに登録されているメソッドが存在することを、イベント発生前にそれがnullではないことから確認します。一方C++/CLIではそのような確認は不要で、確認しようとすると「イベント メンバーの使用方法が無効です (サブスクリプション、サブスクリプションの解除、および呼び出しのみが許可されています)」としてエラーとなります。このエラーにある許可されている使用方法とは、次に示すイベント アクセサ メソッドのそれぞれに対応するものです。