C#3.0笔记(二)预备知识之委托与事件
2009-05-18 08:28:07 来源:WEB开发网很明显地看到add_OnCaculate方法调用的就是委托的Combine方法,从而我们也可以想到remove_OnCaculate方法调用的是Remove方法。从上面我们可以看到其实event关键字只是提供给我们了一种语法上的便利措施。
一个稍微完整的例子
这个例子参考的是《C#与.NET3.0高级程序设计》上面的。使用Car来举例的,当车子加速时到一定限制值时会触发一个预警事件,当超过某一个速度时会触发一个车子爆炸事件。首先看委托跟事件:
public delegate void CarEventHandler(string msg);
public event CarEventHandler AbortToBlow;
public event CarEventHandler Exploded;
EventCar类中有两个事件一个是AbortToBlow一个是Exploded。下面是Car的几个属性以及字段:
private const int MaxSpeed = 180;
public int CurrSpeed { get; private set; }
public bool IsDead { get; private set; }
public string Name { get; private set; }
其中IsDead是表示车子是否已经报废了。下面是一个加速的方法:
public void Accelerate(int addSpeed)
{
if (IsDead)
{
if (this.Exploded!= null)
Exploded("The Car Is Dead");
}
else
{
CurrSpeed += addSpeed;
if (10 == MaxSpeed - CurrSpeed &&AbortToBlow != null)
{
AbortToBlow("Careful!Bona blow!");
}
if (CurrSpeed >= MaxSpeed)
IsDead = true;
else
Console.WriteLine("CurrentSpeed:{0}", CurrSpeed);
}
}
更多精彩
赞助商链接