我想创建一个初始化计时器的类,该计时器将用作其他类成员的中央核心,以便为计时器已过事件注册自己。我的问题是我真的不知道如何向其他类公开计时器已用事件。我认为可能有效的一种解决方案是,我只需将计时器公开为公共属性,该属性将返回计时器对象,并且我可以从此对象调用计时器已用事件,例如:
MyAppTimer appTimer = new MyAppTimer();
Timer timer = appTimer.GetAppTimer;
timer.Elapsed += SomeMethod;
但通过这个解决方案,我将暴露我不想要的整个计时器。如何在 MyAppTimer 类中传入一个方法,该方法将在内部注册该方法与计时器的已用事件?跟代表有关系吗?也许是这样的:
public void RegisterHandler(someStuffGoesHere) //What do I pass in here?
{
timer.Elapsed += someStuffGoesHere;
}
您可以使用显式访问器创建事件:
public event EventHandler TimerElapsed
{
add { timer.Elapsed += value; }
remove { timer.Elapsed -= value; }
}
您班级的客户端可以直接订阅 TimerElapsed 事件:
appTimer.TimerElapsed += SomeHandlerMethod;
如果您想使用代码中所示的 RegisterHandler 方法,则参数的类型应为 EventHandler
EDIT:请注意,使用这种方法,sender 参数的值将是 Timer 对象,而不是 MyAppTimer 对象。如果这是一个问题,你可以这样做:
public MyAppTimer()
{
...
timer.Elapsed += timer_Elapsed;
}
private void timer_Elapsed(object sender, EventArgs e)
{
EventHandler handler = this.TimerElapsed;
if (handler != null)
handler(this, e);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)