1

イベントにサブスクライブしているすべてのデリゲートのサブスクライブを解除する必要があります。しかし、私はそれを行う2つの方法を見つけました..

class Cls
{
    delegate void doDel();
    static event doDel doE;

    void Uns
    {
    //first
    foreach (doDel item in doE.GetInvocationList())
    {
        doE -= item;
    }

    //second
       doE = null;
    }
}

違いは何ですか?また、どの方法が最適で、その理由は何ですか?

4

1 に答える 1

1

最初のアプローチは非常に正しいです。MSDNが述べているように:

  • イベントの登録を解除するには、減算代入演算子 (-=) を使用します。

    publisher.RaiseCustomEvent -= HandleCustomEvent;

すべてのサブスクライバーがイベントのサブスクライブを解除すると、パブリッシャー クラスのイベント インスタンスが null に設定されます。

于 2013-03-16T10:45:49.527 に答える