哪个更好:多个事件的单个委托与多个事件的多个委托?
Which is better: A single delegate for multiple events vs multiple delegates for multiple events?
我很好奇用一个委托来管理大量事件是否比用多个委托来处理所有这些事件更好。
例如,假设我有 50 个事件都在相同的 "category" 和 class 下。这些活动可以分为 5 个组。您是只为所有 50 个相关事件分配 1 个代表,还是为每个 10 个事件的特定组分配 5 个代表?
编辑:这听起来像是一个显而易见的问题,但我没有足够的理解力来自信地为自己回答这个问题。
Edit2:这是一些示例代码。
//## Left-Button
public delegate void LeftButtonHandler();
public static event LeftButtonHandler LeftButtonHeldEvent;
public static event LeftButtonHandler LeftButtonUpEvent;
private static void LeftButton(){
if (Input.GetButton("KeyLeft")){
if (LeftButtonHeldEvent != null)
LeftButtonHeldEvent();
}
}
private static void LeftButtonUp(){
if(Input.GetButtonUp("KeyLeft")){
if (LeftButtonUpEvent != null)
LeftButtonUpEvent();
}
}
//## Down-Button
public delegate void DownButtonHandler();
public static event DownButtonHandler DownButtonHeldEvent;
public static event DownButtonHandler DownButtonUpEvent;
private static void DownButton(){
if (Input.GetButton("KeyDown")){
if (DownButtonHeldEvent != null)
DownButtonHeldEvent();
}
}
private static void DownButtonUp() {
if (Input.GetButtonUp("KeyDown")) {
if (DownButtonHeldEvent != null)
DownButtonUpEvent();
}
}
问题是关于这个的,我有更多的意见要轮询。只为所有键创建 1 个委托是否比为每个键使用一个新委托更好?
注意:这是统一的,但这不是特定于统一的问题。我理解输入轮询来发布事件有点荒谬,但 unity 没有提供订阅自己的 UI 事件的方法。我现在不是特别关心这个,只关心我应该使用 1 个委托还是多个委托。
鉴于您的示例,我将有一个处理程序采用包含键值 pressed/held 的参数,例如:
public delegate void ButtonHandler(object sender, string whichButton);
public static event ButtonHandler ButtonHeldEvent;
public static event ButtonHandler ButtonUpEvent;
private static void ButtonHeld()
{
string keyHeld = "..."; //Todo: Code to get which button is being held
if (ButtonHeldEvent != null)
{
ButtonHeldEvent(this, keyHeld);
}
}
private static void ButtonUp()
{
string keyUp = "..."; //Todo: Code to get which button is up
if (ButtonUpEvent != null)
{
ButtonUpEvent(this, keyUp);
}
}
如果是 KeyLeft、KeyDown 等,让事件的订阅者知道该怎么做
我很好奇用一个委托来管理大量事件是否比用多个委托来处理所有这些事件更好。
例如,假设我有 50 个事件都在相同的 "category" 和 class 下。这些活动可以分为 5 个组。您是只为所有 50 个相关事件分配 1 个代表,还是为每个 10 个事件的特定组分配 5 个代表?
编辑:这听起来像是一个显而易见的问题,但我没有足够的理解力来自信地为自己回答这个问题。
Edit2:这是一些示例代码。
//## Left-Button
public delegate void LeftButtonHandler();
public static event LeftButtonHandler LeftButtonHeldEvent;
public static event LeftButtonHandler LeftButtonUpEvent;
private static void LeftButton(){
if (Input.GetButton("KeyLeft")){
if (LeftButtonHeldEvent != null)
LeftButtonHeldEvent();
}
}
private static void LeftButtonUp(){
if(Input.GetButtonUp("KeyLeft")){
if (LeftButtonUpEvent != null)
LeftButtonUpEvent();
}
}
//## Down-Button
public delegate void DownButtonHandler();
public static event DownButtonHandler DownButtonHeldEvent;
public static event DownButtonHandler DownButtonUpEvent;
private static void DownButton(){
if (Input.GetButton("KeyDown")){
if (DownButtonHeldEvent != null)
DownButtonHeldEvent();
}
}
private static void DownButtonUp() {
if (Input.GetButtonUp("KeyDown")) {
if (DownButtonHeldEvent != null)
DownButtonUpEvent();
}
}
问题是关于这个的,我有更多的意见要轮询。只为所有键创建 1 个委托是否比为每个键使用一个新委托更好?
注意:这是统一的,但这不是特定于统一的问题。我理解输入轮询来发布事件有点荒谬,但 unity 没有提供订阅自己的 UI 事件的方法。我现在不是特别关心这个,只关心我应该使用 1 个委托还是多个委托。
鉴于您的示例,我将有一个处理程序采用包含键值 pressed/held 的参数,例如:
public delegate void ButtonHandler(object sender, string whichButton);
public static event ButtonHandler ButtonHeldEvent;
public static event ButtonHandler ButtonUpEvent;
private static void ButtonHeld()
{
string keyHeld = "..."; //Todo: Code to get which button is being held
if (ButtonHeldEvent != null)
{
ButtonHeldEvent(this, keyHeld);
}
}
private static void ButtonUp()
{
string keyUp = "..."; //Todo: Code to get which button is up
if (ButtonUpEvent != null)
{
ButtonUpEvent(this, keyUp);
}
}
如果是 KeyLeft、KeyDown 等,让事件的订阅者知道该怎么做