イベント発生側 | イベント処理側 | |
---|---|---|
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ではそのような確認は不要で、確認しようとすると「イベント メンバーの使用方法が無効です (サブスクリプション、サブスクリプションの解除、および呼び出しのみが許可されています)」としてエラーとなります。このエラーにある許可されている使用方法とは、次に示すイベント アクセサ メソッドのそれぞれに対応するものです。