デリゲートがあり、次のように言います。
public delegate void MyDelegate();
イベントがあり、次のように言います。
public MyDelegate MyEvent;
イベントの呼び出し中に、次のエラー メッセージが表示されます。
「MyEvent += 予想 .....」
これを解決するにはどうすればよいですか?
+= は、デリゲートの宣言だけでなく、イベントに関連付けられています。「イベント」キーワードがありません。
public **event** MyDelegate MyEvent;
そのキーワードを取得したら、 += が機能します。
イベントは、宣言したクラス内からのみ呼び出すことができます。他の場所では、演算子+=
andを介してのみ、イベント デリゲートからハンドラーを追加または削除できる-=
ため、エラー メッセージが表示されます。
別のクラスのイベントを使用しようとしている場合は、イベントとデリゲートの違いを理解する必要があります。イベントは、「イベントを発生させる」のではなく、「サブスクライブ」と「サブスクライブ解除」の側面をカプセル化するだけです。(実際、ILでは「イベントを発生させる」ためのメンバーを持つことができますが、C# ではサポートされていません。)
詳細については、イベントとデリゲートに関する私の記事を参照してください。
Chris Sells .NET Delegates: AC# Bedtime Storyを参照して、デリゲートとイベントの優れたガイドをご覧ください。有益で非常に面白い。
また、null デリゲートのチェックの回避に関するこの投稿をご覧になることをお勧めします。