• C#事件


     

    其实事件就是一种特殊的委托。
         有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?
         委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。
        
         比如,在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click+=new System.EventHandler(this.button1_Click);按钮按下后就会触发button1_Click方法进行处理。
         EventHandler就是系统类库里已经声明的一个委托。this.button1.Click是委托EventHandler的实例,this.button1_Click是方法名
        
         自定义事件及其处理
         EventHandler以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:
    delegate void 事件委托名(object sender,EventArgs e);
    object用来传递事件的发生者,比如Button控件就是一个事件发生者;EventArgs用来传递事件的细节。
         * */
    /*    class Class1
        { //事件发送类
            public delegate void UserRequest(object sender, EventArgs e); //定义委托
            public event UserRequest OnUserRequest; //定义一个委托类型的事件
            public void run()
            {
                while (true)
                {
                    if (Console.ReadLine() == "a")
                    {
                        OnUserRequest(this, new EventArgs()); //产生事件
                    }
                }
            }
        }
        class Class2
        {//事件接受类
            static void Main(string[] args)
            {
                Class1 c1 = new Class1();
                c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest); //委托实例化后绑定事件
                c1.run();
            }
            private static void c1_OnUserRequest(object sender, EventArgs e)
            {
                Console.WriteLine("/t你触发了事件");
            }
        }*/
      /*  //带事件数据的事件类,从EventArgs继承
        class OnUserRequestEventArgs : EventArgs
        {
            private string inputText;
            public string Inputtext
            {
                get { return inputText; }
                set { inputText = value; }
            }
        }
        class Class1
        {//事件发送类
            public delegate void UserRequest(object sender, OnUserRequestEventArgs e);//声明委托
            public event UserRequest OnUserRequest; //定义一个委托类型的事件
            public void run()
            {
                while (true)
                {
                    Console.WriteLine("请输入内容:");
                    string a = Console.ReadLine();
                    OnUserRequestEventArgs e1 = new OnUserRequestEventArgs();
                    e1.Inputtext = a;
                    OnUserRequest(this, e1);
                }
            }
        }
        class Class2
        {//事件接受类
            static void Main()
            {
                Class1 c1 = new Class1();
                c1.OnUserRequest+=new Class1.UserRequest(c1_OnUserRequest);
                c1.run();
            }
            private static void c1_OnUserRequest(object sender, OnUserRequestEventArgs e)
            {
                Console.WriteLine("/t你输入的是:"+e.Inputtext);
            }
        }*/

  • 相关阅读:
    【Azure Redis Cache】对StackExchange.Redis IOCP错误消息的解读
    【Azure Developer】使用REST API获取Activity Logs、传入Data Lake的数据格式问题
    【Azure 存储服务】Blob中数据通过Stream Analytics导出到SQL/Cosmos DB
    【Azure Redis 缓存】Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)
    【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
    【Azure Service Bus】 Service Bus如何确保消息发送成功,发送端是否有Ack机制 
    领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)
    Java三元表达式中的陷阱
    Java有陷阱——慎用入参做返回值
    Eclipse中安装反编译工具Fernflower(Enhanced Class Decompiler)
  • 原文地址:https://www.cnblogs.com/minotmin/p/2699348.html
Copyright © 2020-2023  润新知