委托与事件的理解
来源:互联网 发布:网上商城源码javaweb 编辑:程序博客网 时间:2024/05/16 07:37
这几天一直在纠结 委托与事件是怎么一样的关系和区别,先看看在什么情况下产生的委托。经常我们会遇到这样的问题,就是要在不同的时候调用不同的方法。
例:向人打招呼这个方法
public void GetPeople(string name){ English(name);}//国外人打招呼static void English(string name){ Console.WriteLine("Good mornning {0}",name);}
当我还要增加其它国家的时候,我们可以要修改GetPeople()方法,如加个中国人打招呼,我们就要做
public void GetPeople(string name,Lang lang){ switch (lang) { case Lang.china: china(name); break; case Lang.english: english(name); break; default: break; }}//加一个枚举类型,来判断调用的是那一个方法public enum Lang{ china,english }//外国人打招呼static void English(string name){ Console.writeLine("Good mornning {0}",name);}//中国人打招呼static void China(string name){ Console.WriteLine("早上好 {0}",name);}
这样是解决了问题,但是如果还要增加方法的话,扩展性是不是很差呢。那有没有像传递string name一样才传递方法呢,传递的时候,给这个参数进行赋值。像这样
public void GetPeople(string name,*** Markmeeting){ Markmeeting(name);//它指向的就是一个方法}
这时候委托就差生了。把方法注册到委托上面(把方法加到委托,像变量赋值一样)。
委托声明格式如下:
public delegate void MarkmeetingDelegate(string name);//delegate 为关键字, void 为返回值, string name为参数,这样就确定了能注册到它上面的方法,应该满足这样条件。
public MarkmeetingDelegate Markeeting;public void GetPeople(string name,MarkmeetingDelegate Markeeting){ Markeeting(name);}//委托public delegate void MarkmeetingDelegate(string name);
在上面的代码中我们是不是看到了这样的一个效果,Public MarkeetingDelegate Markeeting 像不像我们定义类的时候的一个字段呢。字段一般定义为private ,这样用户就不能随便的对其进行操作。对于委托我们也是一样的操作。将委托声明为private的。
如何操作私有的委托呢,这时候就产生了事件。事件就是对委托的一个封装一样的。像类中的属性有点类似。
public event MarkeetingDelegate Markeeting;//用事件对委托进行封装。这时省略写法。public void GetPeople(string name,MarkmeetingDelegate Markeeting){ Markeeting(name);}//委托public delegate void MarkmeetingDelegate(string name);public event MarkeetingDelegate Markeeting;进行反编译的时候,我们可以看到编译器帮我们生成了一个
private MarkGreetDelegate mark;
[MethodImpl(MethodImplOptions.Synchronized)]public void add_mark(MarkGreetDelegate value){ this.mark = (MarkGreetDelegate) Delegate.Combine(this.mark, value);}[MethodImpl(MethodImplOptions.Synchronized)]public void remove_mark(MarkGreetDelegate value){ this.mark = (MarkGreetDelegate) Delegate.Remove(this.mark, value);}
Ok了现在明白了委托和事件吗。加油,加油,这就是我对事件和委托的理解,不对之处,还请指出。
- 委托与事件的理解
- 理解委托与事件
- .net 中委托与事件的理解!
- 我对委托与事件的理解
- 我对委托与事件的理解
- 对事件与委托的理解(1) 使用事件
- 对事件与委托的理解(2) 引发事件
- 对事件与委托的理解(3) 事件示例
- 深入理解事件与委托
- 对事件与委托的理解(4) 心得
- 深入理解.net的事件与委托机制
- 深入理解.net的事件与委托机制
- 关于事件与委托的一些个人简单理解
- C# 委托与事件的一点理解(1)
- C# 委托与事件的一点理解(2)
- C#委托与事件的一点理解(3)
- 快速理解C#高级概念事件与委托的区别
- 对事件委托的理解
- 利用Java生成静态HTML页面
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- MFC中 单文档程序 删除工具栏
- 移动无边框窗体的三种方法
- jQuery工作原理解析以及源代码示例
- 委托与事件的理解
- NDK R4 在Ubuntu 10上配置环境
- SQL Server 存储过程
- 1.4Visual C++能够做些什么?
- Big Gun上手评测:不太严肃的黑帮游戏
- db2 v9.5下载连接地址
- .cd文件解释
- 袁岳(今日小诗:立场)
- 攻击方式学习之(1) - 跨站式脚本(Cross-Site Scripting)