zoukankan      html  css  js  c++  java
  • 【C#】C#托付和事件的实例解说

    using System;
    
    namespace delegate_event
    {
    	// 定义一个猫类
    	class Cat
    	{
    		// 定义一个名字字段
    		private string name;
    		// 创建构造函数,參数为string,给小猫一个初始的名字
    		// 假设初始化的时候不写名字会报错。除非再写一个重载
    		public Cat (string name)
    		{
    			this.name = name;
    		}
    		// 定义一个托付。名字随便起
    		public delegate void CatShoutDelegate ();
    		// 定义一个事件,事件的类型是托付的名字
    		public event CatShoutDelegate CatShoutEvent;
    		// 定义一个猫叫的方法
    		public void Shout ()
    		{
    			Console.WriteLine ("喵~,我是{0}", name);
    			// 当运行猫叫的方法的时候,会推断托付的实例对象是否存在
    			// 当存在实例对象的时候,表示事件已经发生了
    			// 这个时候就该运行被托付的方法了,main函数中是托付的什么方法就运行什么方法
    			if (CatShoutEvent != null) {
    				// 运行事件的托付,就是间接的运行2仅仅老鼠的Run方法
    				CatShoutEvent();
    			}
    		}
    
    	}
    
    	class Mouse
    	{
    		private string name;
    
    		public Mouse (string name)
    		{
    			this.name = name;
    		}
    
    		public void Run ()
    		{
    			Console.WriteLine ("快跑!" + name+"老猫来了!

    "); } } class MainClass { public static void Main (string[] args) { Cat cat1 = new Cat ("Tom"); Mouse mouse1 = new Mouse ("Jerry"); Mouse mouse2 = new Mouse ("Jack"); // 表示将Mouse1的Run的方法通过实例托付给CatShoutDelegate登记到猫的事件CatShoutEvent里面。+=就是加入事件的意思 cat1.CatShoutEvent += new Cat.CatShoutDelegate (mouse1.Run); cat1.CatShoutEvent += new Cat.CatShoutDelegate (mouse2.Run); cat1.Shout(); Console.Read(); } } }



  • 相关阅读:
    WM_CHAR消息分析
    数据库OleDbConnection对象参考
    数据库使用Command对象进行数据库查询
    如何在VBNET中使用调试输出类Debug和Trace
    数据库与数据库连接
    数据库ADONETOleDbDataReader对象参考
    VBNET运行时处理对象事件(AddHandler和RemoveHandler)
    防火墙分类简述(班门弄斧了)
    杀毒防护类软件的组合转帖
    数据库ADONETOleDbCommand对象参考
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6984392.html
Copyright © 2011-2022 走看看