从C#与Net4高级编程复制来的——委托注意事项
来源:互联网 发布:博客系统源码 编辑:程序博客网 时间:2024/06/05 08:07
委托允许内存中的对象进行双向对话。从头使用委托会有一些重复代码(定义委托,声明必要的成员变量记忆创建自定义的注册/注销方法来保护封装等)
除了时间之外,这样使用委托来作为应用程序的回调机制会有另一个问题:如果没有把委托成员变量定义为私有的,调用者就可以直接访问委托对象。这样调用者就可以把变量重新赋值为新的委托对象(实际上,也就是删除了当前要调用的方法列表),更糟糕的是,调用者可以直接调用委托的调用列表。
公共的委托成员打破了封装,不仅会导致代码难以维护和调试,还会导致应用程序的安全风险。
namespace SimpleCarDelegate
{
internal 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……");
}
}
class Program
{
static void Main(string[] args)
{
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("QQQQQQQQQQQQQQQQQ");
Console.ReadLine();
}
static void CallWhenExploded(string msg)
{
Console.WriteLine(msg);
}
static void CallHereToo(string msg)
{
Console.WriteLine(msg);
}
}
}
- 从C#与Net4高级编程复制来的——委托注意事项
- C#与.NET4 高级程序设计-----委托、事件 学习笔记
- C# 高级编程——Action 委托
- C# 高级编程——Func 委托
- 从callback的角度来理解.NET/C# 中的 委托 (delegate)与 事件 (event)
- 从callback的角度来理解.NET/C# 中的 委托 (delegate)与 事件 (event)
- C#与.NET4 高级程序设计-----语言特性 学习笔记
- 读书笔记:《C#与.NET4高级程序设计》-核心部分
- C#与.NET4 高级程序设计 学习笔记 文章导航
- C#高级编程——通过反射来获取类的构造函数
- c#中的高级语法(.Net4)
- C#学习笔记(三)—–C#高级特性中的委托与事件(上)
- C#学习笔记(三)—–C#高级特性中的委托与事件(中)
- C#学习笔记(三)—–C#高级特性中的委托与事件(下)
- C#学习笔记(三)—–C#高级特性中的委托与事件:关于事件
- 快速理解C#高级概念事件与委托的区别
- 读书笔记c#高级编程 委托和事件
- C#高级编程---委托(1)
- shell find 语法
- Android开发之AsyncTask的使用
- 黑马程序员:注解(Annotation)介绍
- MySql插入数据时错误Duplicate entry '131' for key 'PRIMARY'
- [ java ] tomcat中server.xml中虚拟主机配置
- 从C#与Net4高级编程复制来的——委托注意事项
- 在excel中给字符串加入单引号的方法
- Unity3D 4.3新特性 —— 2D
- C# Chart 笔记
- Android中显示html标签或者带图片
- AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
- 调试C的简单过程,查找编译通过之后的程序错误
- 二进制
- sql集合运算