谁能告诉我这两种不同方法的区别?我知道这两种方法都可以处理相同的场景,但是使用第一种或第二种方法有什么优缺点吗?你们会选什么,为什么?
直接订阅事件(使用静态事件):
public class MyEffect : BaseEffect
{
public delegate void EventHandler (Element sender, Unit target);
public static event EventHandler OnMyEvent;
public Damage(Element elementOwner)
{
this.Owner = elementOwner;
}
public void DispatchEvent(Unit target)
{
if (OnMyEvent != null)
{
OnMyEvent(this.Owner, target);
}
}
}
=>事件订阅:
MyEffect.OnMyEvent += CallBack;
或通过Singleton订阅:
public class MyEffect : BaseEffect
{
public delegate void EventHandler (Element sender, Unit target);
public event EventHandler OnMyEvent;
private static MyEffect instance;
public static MyEffect Instance
{
get
{
return instance;
}
}
public Damage(Element elementOwner)
{
this.Owner = elementOwner;
}
public void DispatchEvent(Unit target)
{
if (OnMyEvent != null)
{
OnMyEvent(this.Owner, target);
}
}
}
=>事件订阅:
MyEffect.Instance.OnMyEvent += CallBack;
使用第一种方法。你必须实例化的对象是轻量级的,除非你有明显的理由使用单例(昂贵的对象或大量使用的对象等),否则采用最简单的方法;