0

このSOの回答の後に、C#4.0イベントハンドラーロジックをモデリングしていますが、エラーが発生します

ThresholdExceededEventは、+=または-=の左側にのみ表示できます

コード

    private EventHandler<EventLogAlert> thresholdExceededEventDelegate;
    public event EventHandler<EventLogAlert> ThresholdExceededEvent
    {
        add { thresholdExceededEventDelegate += value; Console.WriteLine("add operation"); }
        remove { thresholdExceededEventDelegate -= value; Console.WriteLine("remove operation"); }
    }

    protected virtual void OnThresholdExceededEvent(EventLogAlert e)
    {
        EventHandler<EventLogAlert> handler = ThresholdExceededEvent;
        if (handler != null)
        {
            handler(this, e);
        }
    }

しかし、これを行うとコンパイルされます。

   public event EventHandler<EventLogAlert> ThresholdExceededEvent;
    protected virtual void OnThresholdExceededEvent(EventLogAlert e)
    {
        EventHandler<EventLogAlert> handler = ThresholdExceededEvent;
        if (handler != null)
        {
            handler(this, e);
        }
    }

推奨されるアプローチは何ですか?

4

2 に答える 2

4

それ以外の

EventHandler<EventLogAlert> handler = ThresholdExceededEvent;

使用する

EventHandler<EventLogAlert> handler = thresholdExceededEventDelegate;
于 2012-05-15T03:48:51.687 に答える
0

2番目のアプローチを使用します。イベントへのアタッチとイベントからのデタッチのカスタム処理が必要ない場合(および、interfaceイベントを明示的に実装しようとしない場合)、最初のオプションのより詳細な構文は必要ありません。とにかく、2番目のコードは、2番目のオプションに非常によく似たものにコンパイルされます。

コードの最初のブロックの構文エラーは、明示的に実装されたイベントを直接実行しようとしていることです。その場合、イベントではなくデリゲート自体を実行する必要があります。

于 2012-05-15T03:32:29.040 に答える