• (转)关于c#中的事件


    原文链接http://blog.csdn.net/joyhen/article/details/8500211

    如有不明白的地方欢迎加QQ群14670545 探讨

     

    最近在看委托,然后看到事件,以前一直很模糊,关于事件的触发者和响应者的关联。贴一个简单的例子:

    1.新建一个类Control.cs

     

    [csharp] view plaincopy
    1. using System;  
    2.   
    3. namespace EventComplex  
    4. {  
    5.     /* 
    6.      * C#中的事件处理实际上是一种具有特殊签名的delegate 
    7.      */  
    8.     public class Control  
    9.     {  
    10.         /// <summary>  
    11.         /// 代表事件发送者  
    12.         /// </summary>  
    13.         /// <param name="sender">代表事件发送者</param>  
    14.         /// <param name="e">事件参数类  
    15.         /// <remarks>用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生</remarks>  
    16.         /// </param>  
    17.         public delegate void MyEventHandler(object sender, MyEventArgs e);//System.EventArgs e  
    18.         public event MyEventHandler MyEvent;  
    19.   
    20.         public Control()  
    21.         {  
    22.             this.MyEvent += new MyEventHandler(RaiseSomeEvent);  
    23.         }  
    24.   
    25.         /// <summary>  
    26.         /// 一个事件  
    27.         /// </summary>  
    28.         public void RaiseSomeEvent(object sender, MyEventArgs e)  
    29.         {  
    30.             Console.WriteLine("hello " + e.ParamName);  
    31.             Console.ReadLine();  
    32.         }  
    33.   
    34.         public void RiseSomeEvent()  
    35.         {  
    36.             //System.EventArgs e = new System.EventArgs();  
    37.             Console.Write("Please input 'Name':");  
    38.             string _param = Console.ReadLine();//ReadLine:按下回车以后才读取,然后触发MyEvent事件  
    39.   
    40.             //if (_param.Equals("jon"))//在用户输入jon的情况下触发事件,否则不触发   
    41.             MyEvent(thisnew MyEventArgs(_param));//MyEvent(this,e)  
    42.         }  
    43.     }  
    44.   
    45.     public class MyEventArgs : System.EventArgs  
    46.     {  
    47.         public string ParamName;  
    48.         public MyEventArgs(string _name)  
    49.         {  
    50.             ParamName = _name;  
    51.         }  
    52.     }  
    53. }  


    2.我们去Main函数里面测试一下;

     

     

    [csharp] view plaincopy
    1. public static void demo4()  
    2.         {  
    3.             Control ctr = new Control();  
    4.             ctr.MyEvent += new Control.MyEventHandler(ResponseSomeEvent);  
    5.             ctr.RiseSomeEvent();  
    6.         }  
    7.         public static void ResponseSomeEvent(object sender, EventArgs e)  
    8.         {  
    9.             Console.WriteLine("Some event occur!");  
    10.         }  
    [csharp] view plaincopy
    1. static void Main(string[] args)  
    2.         {  
    3.             demo4();  
    4.         }  

  • 相关阅读:
    泛型的运用
    LinkdList和ArrayList异同、实现自定义栈
    MD5文件去重
    mysql协议解析
    solrconfig.xml主要配置项
    自定义特性使用
    使用OWIN 为WebAPI 宿主 跨平台
    Web.config配置文件详解
    IIS 之 在IIS7、IIS7.5中应用程序池最优配置方案
    GitHub 创建工程
  • 原文地址:https://www.cnblogs.com/wanshutao/p/3500460.html
Copyright © 2020-2023  润新知