委托与事件
2012-01-27 22:33
197 查看
学习目标:
委托的定义
掌握并熟练使用委托
多重委托的理解
事件的掌握
[b]委托[/b]
委托就是可以对方法进行引用的类,与其他的类不同,委托类只对其匹配的方法进行引用,C#中委托是面向对象的,并且类型是安全的,委托方法的调用可以像任何其他方法一样,具有参数和返回值,但是分配给委托的方法必须与委托的返回类型和参数组成匹配,这里的方法可以是静态方法也可以是实例方法。
定义委托的语法类似于方法的定义,但是没有方法体,定义的前面要加上关键字delegate。
可以根据委托的可见性在委托定义上添加一般的访问修饰符:public、private和protected等
定义委托的语法:
public delegate void MyFirstDelegate(string message);
委托是只要定义就可以使用,并不需要关心它的实现。
委托的使用
委托相当于一个类,但是委托是一个值类型,使用委托就需要对委托进行实例化。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方法传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方,称为调用委托。
示例:
View Code
如上加粗部分为对委托与事件的调用,调用后程序会根据不同的温度做出不同的反应。
运行结果如下:
委托的定义
掌握并熟练使用委托
多重委托的理解
事件的掌握
[b]委托[/b]
委托就是可以对方法进行引用的类,与其他的类不同,委托类只对其匹配的方法进行引用,C#中委托是面向对象的,并且类型是安全的,委托方法的调用可以像任何其他方法一样,具有参数和返回值,但是分配给委托的方法必须与委托的返回类型和参数组成匹配,这里的方法可以是静态方法也可以是实例方法。
定义委托的语法类似于方法的定义,但是没有方法体,定义的前面要加上关键字delegate。
可以根据委托的可见性在委托定义上添加一般的访问修饰符:public、private和protected等
定义委托的语法:
public delegate void MyFirstDelegate(string message);
委托是只要定义就可以使用,并不需要关心它的实现。
委托的使用
委托相当于一个类,但是委托是一个值类型,使用委托就需要对委托进行实例化。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方法传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方,称为调用委托。
示例:
View Code
//派生类TemperatureEventArgs public class TemperatureEventArgs : EventArgs { private int temperature; public int Temperature { get { return temperature; } //set { temperature = value; } } public TemperatureEventArgs(int _temperature) { temperature = _temperature; } } //事件触发类 public class EventSender { public delegate void TemperatureEventHander(object sender, TemperatureEventArgs e); public event TemperatureEventHander temperaturePress; protected virtual void OnTemperaturePess(TemperatureEventArgs e) { TemperatureEventHander hander = temperaturePress; if (hander != null) { temperaturePress(this, e); } } public void isTemperaturePess(int temperature) { OnTemperaturePess(new TemperatureEventArgs(temperature)); } } //事件发生处理类 public class EventReceive { public void Press(object sender, TemperatureEventArgs e) { if (e.Temperature > 80) { Console.WriteLine("报警器检测温度为{0},马上会发生火灾,请速撤离现场", e.Temperature); } else if (e.Temperature > 50 && e.Temperature <= 80) { Console.WriteLine("报警器检测温度太高,可能会发生火灾,请做好撤离现场的准备"); } else { Console.WriteLine("这里温度正常,请安心工作"); } } } //在主程序中调用事件 class Program { static void Main(string[] args) { bool trueorfalse = true; while (trueorfalse) { Console.WriteLine("请输入检测器温度,(只能输入数字,否则会出现异常):"); int temperature = Convert.ToInt32(Console.ReadLine()); EventSender es = new EventSender(); EventReceive er = new EventReceive(); es.temperaturePress += new EventSender.TemperatureEventHander(er.Press); es.isTemperaturePess(temperature); if (temperature > 200) { trueorfalse = false; } Console.WriteLine("--------------------------------------"); Console.WriteLine("--------------------------------------"); } Console.WriteLine("================================================================"); Console.WriteLine("由于温度太高报警器已经损坏,程序将在5秒后退出程序"); Console.WriteLine("请等候......"); Console.WriteLine("距系统关闭还有5秒"); System.Threading.Thread.Sleep(1000); Console.WriteLine("离系统关闭还有4秒"); System.Threading.Thread.Sleep(1000); Console.WriteLine("离系统关闭还有3秒"); System.Threading.Thread.Sleep(1000); Console.WriteLine("离系统关闭还有2秒"); System.Threading.Thread.Sleep(1000); Console.WriteLine("离系统关闭还有1秒"); System.Threading.Thread.Sleep(1000); Console.WriteLine("..."); } 88 }
如上加粗部分为对委托与事件的调用,调用后程序会根据不同的温度做出不同的反应。
运行结果如下:
相关文章推荐
- C# 中的委托和事件 copyright http://www.cnblogs.com/JimmyZhang
- C# 中的委托和事件
- 用简单的代码测一测你是否真的了解:Asp.Net中的事件和委托的实现
- C# 中的委托和事件
- .C#中的委托是什么?事件是不是一种委托?
- C#中的委托和事件(5)---委托、事件与Observer设计模式
- 谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用
- 原生事件委托
- C# 中的委托和事件
- 委托和事件的区别(讲的很详细)
- 手机浏览器 使用事件委托 点击非可点元素的默认点击效果问题
- 事件或委托获取多个返回值和异常处理
- 事件与委托
- 理解C#中的事件与委托
- JavaScript中的事件委托
- C++实现委托,事件原理讲解
- JavaScript事件委托
- 委托、匿名函数、Lambda表达式和事件的学习
- C# 委托 事件 匿名方法
- C# 中的委托和事件