喜羊羊与灰太狼之委托与事件
记得我在初学.NET的时候对委托和事件这对概念理解的是很模糊的,当时在看书的时候只能理解书中代码的逻辑,知道委托和事件怎样用代码具体实现,但对其中的原理理解甚少。这几天在学习ASP.NET网页编程的时候,里面又多次提到了事件、事件参数。于是我决定再重新理解一次委托和事件
//狼类的代码
public class Wolf{string name; //定义一个变量用于存储狼的姓名//构造函数public Wolf(string name){this.name = name;}public string Name{get { return name; }set { name = value; }}public void Scare() //狼有一个恐吓的方法{Console.WriteLine("哈哈,我是{0},小肥羊们快跟我回狼堡吧!",name );Console.WriteLine(); }}
//山羊类的代码
public class Goat{string name; //定义一个变量用于存储山羊的名字//构造函数public Goat(string name){this.name = name;}public string Name{get { return name; }set { name = value; }}public void Run() //羊有一个逃跑的方法{Console.WriteLine("狼来啦,{0}快跑!" ,name); Console.WriteLine();}}
public delegate void WolfScareEventHandler();
public event WolfScareEventHandler WolfScare;
public class Wolf{string name;//构造函数public Wolf(string name){this.name = name;}public string Name{get { return name; }set { name = value; }}//声明一个WolfScareEventHandler委托类型的事件public event WolfScareEventHandler WolfScare;public void Scare(){Console.WriteLine("哈哈,我是{0},小肥羊们快跟我回狼堡吧!",name );//下面是触发WolfScare事件的代码if (WolfScare != null){WolfScare();}}}
static void Main(string[] args){Wolf bigWolf = new Wolf("灰太狼"); //声明一个Wolf类的对象bigWolf,名字是“灰太狼”//声明三个Goat对象Goat happyGoat = new Goat("喜羊羊");Goat lazyGoat = new Goat("懒羊羊");Goat strongGoat = new Goat("沸羊羊");//给事件分配方法bigWolf.WolfScare += new WolfScareEventHandler(happyGoat .Run );bigWolf.WolfScare += new WolfScareEventHandler(lazyGoat.Run);bigWolf.WolfScare += new WolfScareEventHandler(strongGoat.Run);bigWolf.Scare ();}
![](https://img-my.csdn.net/uploads/201208/14/1344941412_3436.png)
protected void Button1_Click(object sender, EventArgs e){}
public class WolfScareEventArgs{string name; //定义一个name变量,让它存储狼的名字,这样事件参数就可以携带狼的名字了public string Name{get { return name; }set { name = value; }}}
public delegate void WolfScareEventHandler(object sender,WolfScareEventArgs e);
public class Wolf{string name;//构造函数public Wolf(string name){this.name = name;}public string Name{get { return name; }set { name = value; }}//声明一个WolfScareEventHandler委托类型的事件public event WolfScareEventHandler WolfScare;public void Scare(){Console.WriteLine("哈哈,我是{0},小肥羊们快跟我回狼堡吧!",name );Console.WriteLine();//下面是触发WolfScare事件的代码if (WolfScare != null){//定义一个事件参数对象WolfScareEventArgs args = new WolfScareEventArgs();args.Name = this.name; //将狼的名字赋给事件参数的Name属性WolfScare(this,args );}//重写ToString方法,这样sender.tostring()就可以显示狼的名字了public override string ToString(){return this .name ;}}
public class Goat{string name;//构造函数public Goat(string name){this.name = name;}public string Name{get { return name; }set { name = value; }}public void Run(object sender,WolfScareEventArgs e){Console.WriteLine("{0}来啦,{1}快跑!",e.Name ,name); //在这里可以用参数e的Name属性显示出哪只狼来了Console.WriteLine("追我的狼是:"+sender.ToString ()); //这里可以用sender对象的ToString方法显示出触发事件的狼的名字Console.WriteLine();}}
static void Main(string[] args){Wolf bigWolf = new Wolf("红太狼");Goat happyGoat = new Goat("喜羊羊");Goat lazyGoat = new Goat("懒羊羊");Goat strongGoat = new Goat("沸羊羊");//给事件添加方法bigWolf.WolfScare += new WolfScareEventHandler(happyGoat .Run );bigWolf.WolfScare += new WolfScareEventHandler(lazyGoat.Run);bigWolf.WolfScare += new WolfScareEventHandler(strongGoat.Run);bigWolf.Scare ();}
protected void Button1_Click(object sender, EventArgs e){}
Button1.Click+=New EventHandler(fun);
protected void TextBox1_TextChanged(object sender, EventArgs e){Response.Write("这是文本框的事件过程");}
Button1.Click+=New EventHandler(TextBox1_TextChanged)
喜羊羊与灰太狼之委托与事件相关推荐
- [C#]委托和事件(讲解的非常不错)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- .NET基础示例系列之六:委托及事件
委托是一个类. 定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法.示例: public partial class Form1 : F ...
- 大白话系列之C#委托与事件讲解(一)
从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...
- 委托、事件、事件访问器
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托与事 ...
- js中的事件委托或是事件代理详解(转载)
起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...
- JS事件委托或者事件代理原理以及实现
事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...
- 对C#下函数,委托,事件的一点理解!
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 今天一来是有点 ...
- 13委托和事件在观察者模式中的应用
当一个被监视对象的方法执行会触发观察者Observer的方法的时候,我们就可以在被监视对象中声明委托和事件. 例子 有一个宠物追踪器挂宠物身上,只要宠物离开主人100米之外,主人手上的显示器显示警告信 ...
- C#综合揭秘——深入分析委托与事件
引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...
最新文章
- 【安全漏洞】CVE-2021-1732 win32k漏洞分析
- Django 学习(一)Django安装以及初步使用
- qt linux实现鼠标位置自动移动,【已解决】qt中鼠标能显示但是无法移动
- 腾讯云加入自媒体分享计划可以免费领取.cn域名啦
- 在单独的WAR组件中对SPA资源和API实现进行分区
- 无心剑中译叶芝《情愁》
- 多个高危 BIOS 缺陷影响英特尔处理器,特斯拉 Model 3 未幸免,可用于供应链攻击...
- 完全卸载oracle11g
- matlab 最小二乘法拟合_最小二乘法辨识1阶离散传递函数
- eclipse 每次打开 提示 subversive svn connectors
- s7200cpu224xp手册_西门子plc s7-200系列|s7-200 cpu224xp|CPU224 XP 高速I/O
- Python处理Excel数据-pandas篇
- Intellig idea关闭自动更新
- mongodb for mac安装
- 高绩效团队-VUCA时代的五个管理策略《二》—代际管理
- jee6 学习笔记 5 - Struggling with JSF2 binding GET params
- 幸运数的定义及其判断
- Dubbo-Zookeeper注册中心;监控中心
- python爬取微博评论点赞数_python 爬虫 爬微博 分析 数据
- DR和DIS的区别?
热门文章
- MySQL语句中过滤条件放在哪?on、where还是having,他们区别和联系
- 将搜狗浏览器收藏夹导入到IE、Firefox、Chrome
- 利用 千千静听服务器 下载歌词 编写完毕 测试成功
- java profiles_使用Profiles
- PCB棕化处理-BondFilm
- 探索自然语言处理:理解、分析和生成人类语言
- 【生信学习第一天】DEseq2 差异表达基因计算
- IDE(4)——VS系列(4)——sln解决方案
- 翻译必考知识点总结+瑞思拜翻译知识点(3,4和5)
- 奥托尼克斯接近开关型号含义_AUTONICS圆形接近开关报价 奥托尼克斯圆形接近开关使用注意...