精通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#中使用委托的学习笔记
- 自定义控件学习笔记(5):事件委托列表的使用
- [学习笔记]c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- 学习笔记之---C#中的委托与事件
- C#与.NET4 高级程序设计-----委托、事件 学习笔记
- C#学习笔记8——C# 中的委托和事件
- C#学习笔记 委托和事件
- C#学习笔记之三:C#接口与事件委托
- [C#]C#学习笔记-委托,事件
- C#委托与事件学习笔记
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- 学习笔记之---C#中的委托与事件
- C#事件 委托 学习笔记
- 《C#高级编程》学习笔记------C#中的事件和委托
- 《C#高级编程》学习笔记------C#中的委托和事件(续)
- C# 2010 从入门到精通 学习笔记1 第2章 使用变量、操作符和表达式
- C# 从入门到精通 学习笔记1 第2章 使用变量、操作符和表达式
- C# 2010 从入门到精通 学习笔记3 第4章 使用决策语句
- C# 2010 从入门到精通 学习笔记3 第4章 使用决策语句
- C# 2010 从入门到精通 学习笔记4 第5章 使用复合赋值和循环语句