您的位置:首页 > 编程语言 > C#

精通C#学习笔记之事件(一)使用委托的弊端

2015-04-13 21:58 696 查看
public class Car
{
public delegate void CarEngineHandler(string msgForCaller);
public CarEngineHandler listOfHandlers;
public void Accelerate(int delta)
{
if (listOfHandlers != null)
{
listOfHandlers("Sorry,this Car is dead...");
}
}
}
委托允许内存中的对象进行双向对话,但当委托的成员变量定义为public时,调用者可以直接访问委托对象,这样,调用者可以把变量重新赋值为新的委托对象,同时调用者可以直接调用委托的调用列表,如下。公共的委托成员打破了封装,导致代码难以维护和调试,还会导致应用程序的安全风险。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*****Agh! No Encapsulation!*****\n");
//创建一个Car类
Car myCar = new Car();
myCar.listOfHandlers = new Car.CarEngineHandler(CallWhenExploded);
myCar.Accelerate(10);
//现在可以赋值一个全新的对象
myCar.listOfHandlers = new Car.CarEngineHandler(CallHereToo);
myCar.Accelerate(10);
//调用者可以直接调用委托
myCar.listOfHandlers.Invoke("hee,hee,hee...");
myCar.Accelerate(10);
Console.ReadLine();
}

static void CallWhenExploded(string msg)
{
Console.WriteLine(msg);
}
static void CallHereToo(string msg)
{
Console.WriteLine(msg);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# event