委托、事件学习笔记
2013-08-28 09:45
176 查看
学习c#有一段时间了,在工作或者学习中总是碰到委托和事件,行内过来人说委托和事件其实就是一个坎,没过去的总感觉到委托和事件很难理解,而过去的人说也就是那么一回事。本人现在应该是处于正在理解的边缘,托大了,其实狗屁都没理解。关于委托和事件,在网上也看了大量的资料,大牛们好像是每个牛都有自己的理解,小可也只能模仿学习,此文仅仅记录自己的学习笔记。如有侵犯大牛的地方,还望海涵。
委托:
委托,开始的理解是将方法作为一个函数的参数进行调用。这种理解是正确的,只是站在表皮上。前几天又听一同事的讲解,别有一番风味。
“当一个类或者是进程需要调用一个方法时,需要借助另外的类或者是进程进行调用,而这种机制就称为委托”。
两种理解本质上是一样的,但是站的高度不一样,对问题的理解肯定不能同日而语。还有牛说:委托可以理解成为函数指针,不同的是委托是面向对象的,而且是类型安全的。
委托使用的三个步骤:
1、声明一个委托: public delegate void processDelegate;
2、定义一个委托对象:processDelegate pro= new processDelegate(需要调用的方法);
3、调用方法:pro(i);
下面是一个委托示例:
View Code
暂且写到此处,如果在以后有更深层次的理解,再次更改补充吧。
补充1:
委托和事件的区别:
委托:明面上是将方法作为一个函数的参数进行调用,另外一种理解是:当一个类或者是进程需要调用一个方法是,需要借助另外的类或者进程进行调用,这种机制成为委托。本质上来讲:委托是一种类型。
事件是一种特殊的委托类型。
委托和事件的区别:委托可以直接调用委托来激发委托所指向的函数,也可以由服务代码自己触发。事件的触发只能由服务代码自己触发。
通俗来说:委托可以从类内和类外进行调用注册的方法;事件只能从类内调用注册的方法,比委托要安全。
补充:
经过一段时间的学习,在本博文的基础上写了一篇:
委托:
委托,开始的理解是将方法作为一个函数的参数进行调用。这种理解是正确的,只是站在表皮上。前几天又听一同事的讲解,别有一番风味。
“当一个类或者是进程需要调用一个方法时,需要借助另外的类或者是进程进行调用,而这种机制就称为委托”。
两种理解本质上是一样的,但是站的高度不一样,对问题的理解肯定不能同日而语。还有牛说:委托可以理解成为函数指针,不同的是委托是面向对象的,而且是类型安全的。
委托使用的三个步骤:
1、声明一个委托: public delegate void processDelegate;
2、定义一个委托对象:processDelegate pro= new processDelegate(需要调用的方法);
3、调用方法:pro(i);
下面是一个委托示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Event { class Program { static void Main(string[] args) { KeyInputMonitor myMonitor = new KeyInputMonitor(); EventReceiver myReceiver = new EventReceiver(myMonitor); myMonitor.Run(); } } //派生一个KeyEventArgs类,来保存按键信息 class keyEventArgs : EventArgs { private char keyChar; public keyEventArgs(char KeyChar) : base() { this.keyChar = KeyChar; } public char KeyChar { get { return keyChar; } } } class KeyInputMonitor { public delegate void KeyDownHanlder(object sender, keyEventArgs e); public event KeyDownHanlder KeyDown; public void Run() { bool finished = false; do { Console.WriteLine("input a char..."); string response = Console.ReadLine(); char responseChar = (response == "") ? '\0':char.ToUpper (response [0]); switch (responseChar ) { case 'X': finished = true ; break ; default : keyEventArgs myKeyEventArgs = new keyEventArgs (responseChar ); KeyDown (this ,myKeyEventArgs );//触发事件 break ; } }while (!finished); } } //类先产生一个委托实例,再把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件 class EventReceiver { public EventReceiver(KeyInputMonitor monitor) { monitor.KeyDown += new KeyInputMonitor.KeyDownHanlder(monitor_KeyDown); } void monitor_KeyDown(object sender, keyEventArgs e) { //真正的事件处理函数 Console.WriteLine("capture key:{0}", e.KeyChar); } } }
View Code
暂且写到此处,如果在以后有更深层次的理解,再次更改补充吧。
补充1:
委托和事件的区别:
委托:明面上是将方法作为一个函数的参数进行调用,另外一种理解是:当一个类或者是进程需要调用一个方法是,需要借助另外的类或者进程进行调用,这种机制成为委托。本质上来讲:委托是一种类型。
事件是一种特殊的委托类型。
委托和事件的区别:委托可以直接调用委托来激发委托所指向的函数,也可以由服务代码自己触发。事件的触发只能由服务代码自己触发。
通俗来说:委托可以从类内和类外进行调用注册的方法;事件只能从类内调用注册的方法,比委托要安全。
补充:
经过一段时间的学习,在本博文的基础上写了一篇:
委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
相关文章推荐
- 委托和事件学习笔记
- 事件和委托学习笔记(2007.12.20)
- C#学习笔记之三:C#接口与事件委托
- 委托与事件学习笔记1---什么是委托?
- C#与.NET4 高级程序设计-----委托、事件 学习笔记
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- 学习笔记--委托,Lambda表达式和事件(2)
- 《C#高级编程》【第八章】委托、lambda表达式和事件 -- 学习笔记
- 学习笔记---再次理解事件和委托
- 自定义控件学习笔记(5):事件委托列表的使用
- tony的js学习笔记--事件委托
- C#委托与事件学习笔记
- 【unity3d-C#学习笔记】C#中的委托和事件
- 精通C#学习笔记之事件(一)使用委托的弊端
- 委托与事件学习笔记1---什么是委托?
- [ASP.NET学习笔记之二十二].NET中的委托与事件研究
- C#学习笔记19-委托和事件
- 《C#高级编程》学习笔记------C#中的事件和委托
- 委托与事件学习笔记1---什么是委托?
- 学习笔记---对委托、匿名方法、Lama表达式及事件的理解