2016-12-31 8 views
0

私はC#でイベントシステムを勉強していたので、はなぜイベントのサブスクライバに直接アクセスできないのか理解しています。 (私は代理人から始め、無名関数とラムダステートメントを使いました)。最初のシステムを実装するときにサブスクリプションを管理するという問題が発生しました。私はここで非常に緑色です。C#の特定のイベントハンドラからサブスクリプションをクリアするにはどうすればよいですか?

いつものようにStackoverflowは非常に役に立ちます。 This question shows me how to make a function to clear all the subscribers.私の目的のために、これは十分に具体的なものです(すべてをクリアし、必要に応じて新しいものを割り当てる)。

複数のイベントデリゲートのいずれかをクリアするように単一の機能に通知するにはどうすればよいですか?

public delegate void AnEventHandler(object sender, EventArgs e); 

public class EventPublisher : 
{ 
    public event AnEventHandler GroupA; 
    public event AnEventHandler GroupB; 

    public void ClearSubscribers(AnEventHandler handlerToClear) 
    { 
     handlerToClear = null; 
    } 
} 

私はこのようにそれを書くことができると思った、と私のサブスクライブしているクラスは、単に

(EventPublisher MYPUBLISHER)

MyPublisher.ClearSubscribers(MyPublisher.GroupA); 

しかし、それは私だけでそれを使用することができます知らせるああを行うことができます+ =または - =演算子は、私は参照が受け入れられると思ったので私は少し驚いた。

I also do intend to implement my own add() and remove() functions.これについては、同じ問題があります。私は6つのイベントハンドラが必要です。確かに私は6つの並列無効化関数と6つのユニークな加算/除去関数を書く必要はありませんか?私の脳は継承を考えていますが、ドットはつながっていません。

答えて

-1

できれば、変数をnullに設定すると、その変数が削除されてから再設定されます。

そうしないと、this wayを実行できるはずです。

+0

質問は、パブリッシュクラスの外部からいくつかのイベントのうち選択されたイベントをnullにすることができる関数を書く方法です。 – JayMounes

+0

これは質問された質問に答えません。このサイトのルールを無視し続けると、* Everywhere *の特権を得るために50の評判を得ることはまずありません。詳細については、[回答]を参照してください。 – IInspectable

+0

この問題についていくつかの方法を見つけました。まず、イベントの保護に問題のないデリゲートを使用できます。次に、イベントの+ =と - =演算子をオーバーライドして、そのような関数が不要になるようにすることができます(これは、消費者がオーバーライドについて知ることができないため悪い方法です)。第3に、この機能が必要なイベントごとに、公開クラス内に関数を書くことができます。これは可能でなければならないようで、質問は純粋に学問的です。私は自分のプログラムの構造を変更して、必要でないようにしました。 – JayMounes

関連する問題