• 【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(); } } }



  • 相关阅读:
    uboot编译配置过程
    APUE-数据库函数库
    值得推荐的C/C++框架和库 (真的很强大)
    ubuntu12.04图形界面与命令行界面切换
    ubuntu14.04 升级gcc的方法
    4. H5+css3
    3,css 内容
    2. 浏览器兼容性问题
    1,http协议
    页面添加水印
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6984392.html
Copyright © 2020-2023  润新知