[英]Implementation of an Event in C#
对了,我看了所有我能得到我的手是提供C#(简单的实现事件的页1 , 2 , 3 )。 我只是无法让我的活动正常进行。 我正在从VB.net移植程序,该程序非常易于使用。
因此引发事件的类:
class TickerClass
{
// Event Setup
public EventArgs e = null;
public delegate void UpdateEventHandler(TickerClass t, EventArgs e);
public event UpdateEventHandler Update;
void doSomethingAndRaiseTheEvent()
{
Update(this, null);
}
}
实例化TickerClass并处理事件的类:
public class Engine
{
TickerClass ticker;
// constructor
public Engine()
{
ticker = new TickerClass();
// subscribe to the event
ticker.Update += new TickerClass.UpdateEventHandler(TickerUpdated);
}
// method to call when handling the event
public void TickerUpdated()
{
//do stuff with ticker
}
}
此实现有什么问题?
您的事件处理程序与用于定义事件的委托的签名不匹配,因为我确定您收到的错误消息会告诉您。
偶数签名表示它接受TickerClass
和EventArgs
作为方法的参数。 您的事件处理程序都没有。
修复签名后,该示例将起作用。
请注意,定义您自己的自定义委托没有任何特殊原因; 为了方便起见,您可以改用Action
。
添加事件处理程序时,您也不需要明确声明委托的类型。 给定ticker.Update += TickerUpdated
时,编译器可以进行推断。
TickerUpdated需要具有一个与您的UpdateEventHandler
定义相匹配的签名:
public void TickerUpdated(TickerClass sender, EventArgs e)
{
// This will work now
请注意,除了在引发事件时传递null
,使用EventArgs.Empty
并以惯用的方式在处理程序上检查null也是一个好主意:
void doSomethingAndRaiseTheEvent()
{
var handler = this.Update;
if (handler != null)
handler(this, EventArgs.Empty);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.