すでにデザインのアイデアについて述べたように、今イベントシステムを実装するために始めて。いわゆるイベントシステムは、実際には、イベントのコレクションです。イベントが一元管理を保存します。
イベントは、多くの関係に一つであり、そして私は、文字列のイベントを表すことにしました。HashSetのは、複数のデリゲートを格納するために使用される。自然淘汰辞書ストレージのこのキー/値のコレクションということ。ここでは、特定の設計委託を説明していない。してみましょう表すクラスでEventMethod。
次のコードを実装します。
/// <要約> /// 事件系统 /// </要約> パブリック クラスEventSystem { #regionフィールド /// <要約> /// 事件容器 /// </要約> プライベート 読み取り専用辞書< 文字列、HashSetの<EventMethod >>イベント= 新しい辞書< 文字列、HashSetの<EventMethod >> (); #endregionの #regionメソッド /// <要約> /// 添加事件 /// </要約> /// ます。<param name =「EventMethod」> </ param>の 公共 BOOL 追加(EventMethod EventMethod) { // 存在することができるメソッドのセットでのイベントがすぐに決定されますが、すぐに別のスレッドで削除されます。だからここ5回のリトライ のための(int型 = I 0 ; I < 5。 ; I ++ ) { // メソッドイベントのセットを作成し たIF(!)events.ContainsKey(eventMethod.Handle) { ロック(イベント) { IF(!)events.ContainsKey(eventMethod.Handle) events.Add (eventMethod.Handle、新しい新しい HashSetの<EventMethod>()); } } //の収集方法にイベントを追加 IF(events.TryGetValue(eventMethod.Handle、OUTの VAR HashSetのは)) を返すhashSet.Add(EventMethodを); } リターン falseに; // スロー新しい新しい例外($は、「イベント{eventMethodを追加します。ハンドル}失敗した! "); } /// <要約> /// 削除イベント /// </要約> /// <PARAM NAME =" EventMethod「> </ param>の 公共 のボイドのremove(EventMethod EventMethod) { もし(events.TryGetValue(eventMethod.Handle、アウト でしたHashSetの)) { hashSet.Remove(EventMethod); // 削除イベント収集方法が空いていた IF(hashSet.Count <= 0 ) events.Remove(eventMethod.Handle); } } #endregion }
EventMethod彼はシステムを実装するために追加したときに、イベントを対応する収集方法に追加しますので、イベントの種類を表すために委託されたプロパティHnadleがあります。同様に削除されます。
より良い設計上の簡単なイベントコンテナ。もちろん、今トリガーすることはできません、トリガーが。バックに充填することができた後、我々は良いEventMethodの設計は、イベントを実装するために始めました。
ポータル: