控制台应用程序效果:

代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace MyEventTest
  7. {
  8. class Program
  9. {
  10. /// <summary>
  11. /// 第一步 新建委托需要的带参数的类,属于事件的参数的子类
  12. /// </summary>
  13. public class MyClassEventArgs : EventArgs
  14. {
  15. private string name;
  16.  
  17. public string Name
  18. {
  19. get { return name; }
  20. set { name = value; }
  21. }
  22. private int age;
  23.  
  24. public int Age
  25. {
  26. get { return age; }
  27. set { age = value; }
  28. }
  29.  
  30. }
  31.  
  32. /// <summary>
  33. /// //第二步 新建一个带参数的委托
  34. /// </summary>
  35. /// <param name="sender">触发源</param>
  36. /// <param name="mc">参数</param>
  37. public delegate void MyDelegate(object sender,MyClassEventArgs mc);
  38.  
  39. /// <summary>
  40. /// 第三步 新建一个会触发事件的类
  41. /// </summary>
  42. public class Custom
  43. {
  44. /// <summary>
  45. /// 第四步 新建一个委托发生时触发的事件
  46. /// </summary>
  47. public event MyDelegate Shout;
  48.  
  49. private string name;
  50.  
  51. public string Name
  52. {
  53. get { return name; }
  54. set { name = value; }
  55. }
  56. private int age;
  57.  
  58. public int Age
  59. {
  60. get { return age; }
  61. set { age = value; }
  62. }
  63.  
  64. public Custom()
  65. {
  66.  
  67. }
  68.  
  69. public Custom(string n, int a)
  70. {
  71. name = n;
  72. age = a;
  73. }
  74.  
  75. public void Buy()
  76. {
  77. Console.WriteLine("{0}:我要来买东西!",this.name);
  78.  
  79. //第五步 在方法中关联事件
  80. MyClassEventArgs mcea = new MyClassEventArgs();
  81. mcea.Name = name;
  82. mcea.Age = age;
  83. if (Shout != null)
  84. {
  85. Shout(this,mcea);
  86. }
  87. }
  88. }
  89.  
  90. /// <summary>
  91. /// 第六步 新建一个事件发生后要执行的类
  92. /// </summary>
  93. public class Reporter
  94. {
  95. public void Notify(object sender, MyClassEventArgs mcea)
  96. {
  97. Console.WriteLine("老板:小白快去接客了,客户名字叫{0},年龄{1}岁",mcea.Name,mcea.Age);
  98. }
  99. }
  100.  
  101. /// <summary>
  102. /// 第七步 做一种触发事件的情况,并把事件和事件的处理关联起来
  103. /// </summary>
  104. /// <param name="args"></param>
  105. static void Main(string[] args)
  106. {
  107. Custom c1 = new Custom("大美女",);
  108. Reporter r1 = new Reporter();
  109.  
  110. c1.Shout +=new MyDelegate(r1.Notify);
  111.  
  112. c1.Buy();
  113. }
  114. }
  115. }

C#练习委托、事件、事件处理的更多相关文章

  1. C#委托,事件理解入门 (译稿)

    原文地址:http://www.codeproject.com/Articles/4773/Events-and-Delegates-Simplified 引用翻译地址:http://www.cnbl ...

  2. JavaScript中事件委托(事件代理)详解

    在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托 ...

  3. python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))

    一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...

  4. Js 中的事件委托/事件代理

    什么叫事件委托/事件代理呢 ? JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.   事件冒泡: 当事件发生后,这个事件就要开始传 ...

  5. 理解jquery on 委托事件的机制

    前两天做了一个点击任意位置,都能关闭菜单的功能,因为菜单里面的每一个a,的点击事件都是用on绑定的.所以在阻止冒泡的时候不管用,今天特意来理解一下on的机制 on 是委托事件,利用的就是冒泡原理 $( ...

  6. C# ~ 从 委托事件 到 观察者模式 - Observer

    委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...

  7. 关于ios使用jquery的on,委托事件失效

    $('.parents').on("click",'.child',function(){}); 类似上面这种,在ios上点击"child"元素不会起作用,解决 ...

  8. Observer设计模式中-委托事件-应用在消息在窗体上显示

    Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...

  9. Asp.net用户控件和委托事件

    在Asp.net系统制作过程中,门户类型的网站,我们可以用DIV+CSS+JS+Ajax全部搞定,但是一旦遇到界面元素比较复杂的时候,还是UserControl比较方便一些,各种封装,各种处理,然后拖 ...

  10. jQuery里面的普通绑定事件和on委托事件

    以click事件为例: 普通绑定事件:$('.btn1').click(function(){}绑定 on绑定事件:$(document).on('click','.btn2',function(){ ...

随机推荐

  1. 跟踪运行时错误 vue

    如果在组件渲染时出现运行错误,错误将会被传递至全局 Vue.config.errorHandler 配置函数 (如果已设置).利用这个钩子函数来配合错误跟踪服务是个不错的主意.比如 Sentry,它为 ...

  2. 【HTML5】交互元素menu&command元素

    1.交互元素<menu> 1.1源码 <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  3. Python:Dom生成XML文件(写XML)

    http://www.ourunix.org/post/327.html 在python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文 ...

  4. VBA小功能集合-判断列内是否有重复值

    1.判断列内是否有重复值: Dim arrT As Range Dim rng As Range Set arrT = Range("A:A")'判读A列单元格 For Each ...

  5. Python Numpy 数组的初始化和基本操作

    一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组 ...

  6. HTTP ----通信机制

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1)    建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立 ...

  7. 通过google地图的webservice根据城市名称获取经纬度

    谷歌Geocoding webservice接口获取经纬度信息,由于获取地点的数量级太大,2000多条记录,从response的xml格式中取出该地点的经纬度信息.google有访问限制,如果超出25 ...

  8. PHPMailer 使用 中文乱码

    WordPress在用. You'll find plenty more to play with in the examples folder. 中文乱码问题: $mail->CharSet ...

  9. web开发之html5---html5 动画特效舞动的雨伞

    http://www.cnblogs.com/stoneniqiu/p/4199294.html

  10. iOS图片无损拉伸

    一张图片如果放大的话一般情况下会失真,如果该图片是规则的,比如这个聊天气泡,可以用如下代码来设置 UIImage *rightImg = [UIImage imageNamed:@"Sen ...