我目前正在審查代碼。爲什麼要從Unity委託事件中刪除事件?
在審查過程中,我收到了一些問題。
這是接收事件的部分的代碼內容。
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;
}
}
我很好奇。我不明白爲什麼我想刪除添加的事件。
你能否澄清這部分?
請幫助我作爲初學者。
我希望你的代碼審查也提出了這個代碼使用Java命名約定而不是C#的命令。 – Enigmativity
此外,名爲'On *'的方法按慣例用於引發事件而不是處理它。你的'onHandleEvent'顯然處理事件。它應該被恰當地稱爲'HandleEvent'。 – Enigmativity