zoukankan      html  css  js  c++  java
  • C#基础可以快速理解事件机制的事件示例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace EvenDemo
    {
        /// <summary>
        /// 事件参数类,继承自EventArgs,包含事件信息
        /// </summary>
        public class DoorInfoEventArgs : EventArgs
        {
            /// <summary>
            /// 显示门状态信息
            /// </summary>
            public string doorInfo;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="isOpen">是否打开门,true/false</param>
            public DoorInfoEventArgs(bool isOpen)
            {
                if (isOpen)
                {
                    doorInfo = "门现在已经打开了!";
                }
                else
                {
                    doorInfo = "门不能打开!";
                }
            }
        }
    
        /// <summary>
        /// 定义门代理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e">事件信息</param>
        public delegate void OpenDoorEventHandler(object sender, DoorInfoEventArgs e);
    
    
        /// <summary>
        /// 事件类
        /// </summary>
        public class CommandDoor
        {
            /// <summary>
            /// 定义事件(即:创建代理对象)
            /// </summary>
            public event OpenDoorEventHandler openDoor;
    
            /// <summary>
            /// 定义触发事件的属性
            /// </summary>
            public bool IsOpen
            {
                set 
                {
                    DoorInfoEventArgs myEven = new DoorInfoEventArgs(value);//事件参数
                    openDoor(this, myEven);//调用事件代理
                }
            }
     
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                //创建事件对象,并添加事件实现代理的实例化
                CommandDoor commandDoor = new CommandDoor();
                commandDoor.openDoor += new OpenDoorEventHandler(Door);
    
                //由设置属性的值触发事件
                Console.WriteLine("是否打开门?Y/N");
                char commandChar =(char) Console.Read();
                if (commandChar == 'Y')
                {
                    commandDoor.IsOpen = true;
                }
                else
                {
                    commandDoor.IsOpen = false;
                }
                Console.ReadKey();
    
            }
    
            /// <summary>
            /// 事件执行的方法
            /// </summary>
            /// <param name="source"></param>
            /// <param name="e"></param>
            public static void Door(object source, DoorInfoEventArgs e)
            {
                Console.WriteLine(e.doorInfo);
            }
        }
    }
  • 相关阅读:
    按照鬼哥学so变化,四,第一章的例子
    浏览器发送总共下载文件2第二个请求,如何“下载”仅仅记录1次要?
    hdu 3371 Connect the Cities
    自己写RTPserver——大约RTP协议
    cocos2d-x3.2中将XCode发展project转移到VS2010可能会发生错误
    apache kafkac系列lient发展-java
    大约++和--了解运营商
    socket计划——一个简单的例子
    PhotoShop基本工具 -- 移动工具
    ZA7783:MIPI转LVDS/MIPI转RGB888/RGB转LVDS
  • 原文地址:https://www.cnblogs.com/mane/p/2446747.html
Copyright © 2011-2022 走看看