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

来源:互联网 发布:淘宝几十元澳洲羊毛被 编辑:程序博客网 时间:2024/05/18 09:07


 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);        }    }


0 0