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



  • 相关阅读:
    一文搞懂 ThreadLocal 原理
    听说用 Lombok 可以早点下班?
    原来 CPU 为程序性能优化做了这么多
    如何优雅地中止线程?
    线程数,射多少更舒适?
    Elasticsearch 之聚合分析入门
    Go语言之旅:基本类型
    Go语言之旅:包
    网络七层协议之数据链路层
    网络七层协议之物理层
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6984392.html
Copyright © 2011-2022 走看看