有了代理,为什么还要事件?是否代理和事件一定要“双生”?
事件的作用是:缩小客户端使用代理的权限:只能增建、删除注册。而不能Invoke或者重置代理。如果采用私有化代理并且自定义访问方法也可以做到这点。真是这个机制太常用了,增加一个event关键字可以少打一点代码
如果客户端需要再更加大的范围使用类的代理,则不用事件即可。
事件的声明:访问权限 + event关键字 + 代理类型 ;
car:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestCS
{
public class Car
{
#region Properties and variables
private int maxSpeed = 500;
private string petName;
private int currentSpeed;
public string PetName
{
get { return petName; }
set { petName = value; }
}
public int CurrentSpeed
{
get { return currentSpeed; }
set { currentSpeed = value; }
}
#endregion
public delegate void CareExploedHandle(string msg);
public event CareExploedHandle Exploed;
bool isExploed=false;
public void Accelerate(int delta)
{
if (isExploed)
{
if(Exploed!=null)
Exploed("Car is exploed!");
}
else
{
currentSpeed += delta;
Console.WriteLine("Current Speed is {0}", currentSpeed.ToString());
if (maxSpeed< currentSpeed)
isExploed = true;
}
}
}
}
客户端:
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace TestCS
{
class Program
{
public static void Main(string[] args)
{
Car c = new Car();
c.Exploed += new Car.CareExploedHandle(ShowExploed);
for (int i = 0; i < 10; i++)
{
c.Accelerate(100);
}
}
public static void ShowExploed(string msg)
{
Console.WriteLine("client is doing....."+msg);
}
}
}