委托机制(C#)
来源:互联网 发布:金牛教育网络视频 编辑:程序博客网 时间:2024/06/05 16:06
附加:委托机制
注意:Java没有委托机制!!
案例:
有一只猫叫TOM,两只老鼠Jerry和Jack,Tom只要叫一声“喵,我是TOM”,两只老鼠就说“猫来了,快跑”然后逃跑。
委托的本质
委托(Handler)是对函数的封装,是一种类,事件标识(event)则是委托的一种特殊形式(注意此处不是Event对象,不负责传递事件信息),是一种特殊的委托类,事件对象则是一个函数。
委托是一种方法的引用,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
委托的实现(三步):
Ø Public delegate void CatShoutEventHandler();//委托类的声明,说明创建了一个委托类,是一个函数类,即该类的对象都是函数。
Ø Public event CatShoutEventHandler CatShout;//事件的声明,即特殊委托类对象CatShout对象的声明;建立了一个CatShout对象,该对象是一个函数的实例,因为委托类是函数的封装,本质是一个函数类。
Event标识是说,如果发生了其他类或对象关注的事情时,委托类或对象(CatShout)可通过事件(EventArg)通知他们
Ø Cat.CatShout +=new Cat.CatShoutEventHandler(mouse1.run);//给委托分配方法。
具体参见《大话设计模式》附录一中的委托
using System;using System.Collections.Generic;using System.Text;namespace 动物练习{ class Program { static void Main(string[] args) { Cat cat = new Cat("Tom"); Mouse mouse1 = new Mouse("Jerry"); Mouse mouse2 = new Mouse("Jack"); cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);//给委托分配方法。 cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);//给委托分配方法。 cat.Shout(); Console.Read(); } } //无参数委托事件 //class Cat //{ // private string name; // public Cat(string name) // { // this.name = name; // } // public delegate void CatShoutEventHandler(); // public event CatShoutEventHandler CatShout; // public void Shout() // { // Console.WriteLine("喵,我是{0}.", name); // if (CatShout != null) // { // CatShout(); // } // } //} //class Mouse //{ // private string name; // public Mouse(string name) // { // this.name = name; // } // public void Run() // { // Console.WriteLine("老猫来了,{0}快跑!", name); // } //} //有参数委托事件 class Cat { private string name; public Cat(string name) { this.name = name; } public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args);//委托类的声明,说明创建了一个委托类,是一个函数类,即该类的对象都是函数。 public event CatShoutEventHandler CatShout;//事件的声明,即特殊委托类对象CatShout对象的声明;建立了一个CatShout对象,该对象是一个函数的实例,因为委托类是函数的封装,本质是一个函数类。Event标识是说,如果发生了其他类或对象关注的事情时,委托类或对象(CatShout)可通过事件(EventArg)通知他们 public void Shout()//1 { Console.WriteLine("喵,我是{0}.", name); if (CatShout != null) { CatShoutEventArgs e = new CatShoutEventArgs();//传递的信息存放在CatShoutEventArgs中,以函数形参的形式传递。 e.Name = this.name; CatShout(this, e);//2 } } } public class CatShoutEventArgs : EventArgs { private string name; public string Name { get { return name; } set { name = value; } } } class Mouse { private string name; public Mouse(string name) { this.name = name; } public void Run(object sender, CatShoutEventArgs args)//3 { Console.WriteLine("老猫{0}来了,{1}快跑!", args.Name, name); } }}
0 0
- 委托机制(C#)
- C#中的委托机制
- 委托(Delegate)机制
- C#(自学) 委托
- 【C#】 委托(Delegate)
- 委托机制
- 委托机制
- 学习委托(2)-------解析委托的实现机制
- 学习委托(2)-------解析委托的实现机制
- 学习委托(3)-----解析委托的实现机制续篇
- 学习委托(3)-----解析委托的实现机制续篇
- C#/.NET中委托和事件的机制和应用
- C++实现的委托机制(一)
- C++实现的委托机制(二)
- C++实现的委托机制(三)
- Delegate 委托 C#(ZZ)
- (C#) 内置 委托(1)
- 委托和事件(C#)
- JQuery UI datepicker 使用方法
- ios-获取系统相簿里边的所有照片
- 搜索引擎的检索模型-查询与文档的相关度计算
- c语言中出现左操作数必须是左值(摘抄)
- Kinect开发教程一:OpenNI的安装与开发环境配置
- 委托机制(C#)
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
- 如何使div居中显示
- http post调用指定Url接口(C#实现)
- 写一个属于自己的PHP的MVC框架(二)
- ocr扫描文字识别软件怎么样
- 深入探讨ViewPager的FragmentPagerAdapter
- cv::mat to IplImage
- 第九周项目六--三色球问题