我想实现一种快速添加侦听器的方法,我的实现:
public class AccountManager
{
public delegate void CheckIfLoggedInListener(EventArgs e);
public event CheckIfLoggedInListener SetCheckIfLoggedInListener;
public void CheckIfLoggedIn()
{
if(SetCheckIfLoggedInListener!=null)
SetCheckIfLoggedInListener(new EventArgs("e"));
}
}
现在,我必须首先设置侦听器,然后调用该方法,如果其他开发人员没有注意,这可能很容易搞砸:
//this will not work, because you invoke the event before subscribing
accountManager.CheckIfLoggedIn();
accountManager.SetCheckIfLoggedInListener += (e) => { Debug.Log(e.param); };
我想知道是否有办法让订单不是强制性的?
答案 0 :(得分:0)
您可以使用通用委托的参数作为Action<T>
类型的对象,在您的情况下,您的方法中的Action<EventArgs>
可以确保:{/ p>
你需要调整它才能工作,而不是Action<EventArgs>
,我们必须使用Action<Object,EventArgs>
,this post explains why is that
public void CheckIfLoggedIn(Action<object,EventArgs> action)
{
SetCheckIfLoggedInListener = action.Invoke;
if(SetCheckIfLoggedInListener!=null)
SetCheckIfLoggedInListener(null,new EventArgs());
}
在打电话时你需要这样做:
//this will not work, because you invoke the event before subscribing
accountManager.CheckIfLoggedIn((o,e) => { Console.WriteLine("event fired"); });
通过这种方式,您可以强制用户注册触发事件时要调用的实现。
希望它有所帮助!