現在、コードを確認しています。ユニティデリゲートイベントからイベントを削除するのはなぜですか?
レビュー中、私は質問がありました。
これは、イベントを受信したパートのコード内容です。
EventManager.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace wp.events
{
delegate void WordEventDelegate(object obj, EventArgs e); // 델리게이트 선언
class EventManager : WordGameSingleton<EventManager> // 싱글톤 상속받음
{
public event WordEventDelegate wordeSendEvent; // 이벤트 델리게이트 선언
public void dispatchEvent(object obj, EventTypes type, Hashtable data = null) // 이벤트 수신
{
GameEvent evt = new GameEvent();
evt.obj = obj; // 받은 이벤트의 객체
evt.eventType = type; // 받은 이벤트의 타입
evt.evetData = data; // 받은 이벤트의 데이터
wordeSendEvent (this, evt);
}
public void addEvent(WordEventDelegate wedlistener) // 이벤트를 추가함
{
wordeSendEvent += wedlistener;
}
public void removeEvent(WordEventDelegate wedlistener) // 이벤트를 삭제함
{
wordeSendEvent -= wedlistener;
}
}
}
私は、コード内で列挙するイベントタイプを設定します。イベントを登録例えば
..
public enum EventTypes
{
GAME_INIT,
...
}
インターフェイス、及びオブジェクトとして実装されているEventArgsをパラメータとして設定されています。
例えば..
interface IWordGame
{
void onHandleEvent(object sender, EventArgs e);
}
そして、ゲームが開始されると、それは、init()関数内でイベントを追加します。例えば
..
public void init()
{
EventManager.Instance.addEvent(onHandleEvent);
}
私もイベントを追加することを理解。 しかし、なぜ追加イベントを再度削除したのか分かりません。
その部分は次のコードに示されています。
public void onHandleEvent(object sender, EventArgs e)
{
GameEvent evt = e as GameEvent;
Debug.Log(">> event type : " + evt.type);
switch(evt.type)
{
case EventTypes.INTRO_STAR:
EventManager.Instance.removeEvent(onHandleEvent);
break;
}
}
私は好奇心が強いです。なぜ私は追加されたイベントを削除したいのか分かりません。
あなたはこの部分を分かりやすく教えてください。
初心者として私を助けてください。
あなたのコードレビューが、このコードがC#の名前付け規則ではなくJava命名規則を使用していることを歓迎したいと思います。 – Enigmativity
また、 'On *'という名前のメソッドは、慣習的に、イベントを処理するのではなく、イベントを発生させるために使用されます。あなたの 'onHandleEvent'は明らかにイベントを処理しています。これは、適切に 'HandleEvent'と呼ばれるべきです。 – Enigmativity