C#中的事件 一看即明

来源:互联网 发布:参加淘宝聚划算的条件 编辑:程序博客网 时间:2024/06/12 00:16
1.本文写了两个例子来说明C#中的事件。

例子1: 事件是:电话响了。  事件发生之后:主人走过来,电视静音了。---该例子事件不带参数不带返回值

例子2: 事件是:知道了圆的半径。  事件发生之后:计算圆的周长,计算圆的面积。---该例子带参数和返回值。

2.例子1执行结果:

例子1代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1  //不带参数不带返回值{    ///事件是:电话响了。  事件发生之后:主人走过来,电视静音了。        // 1.定义一个委托  该委托接收签名为空且返回值为空的方法    public delegate void AfterTeleRinged();        // 2.定义一个事件类     public class TeleRingClass    {        // 3.事件类中包含:一个事件类型的成员对象,是上面定义的委托类型的        public event AfterTeleRinged teleRinged;        // 4.事件类中包含:触发该事件的代码,即调用本事件类中事件的代码,即执行该事件类中的event成员对象中保存的方法        public void CallTheRing()        {            Console.WriteLine("有人打来电话,电话响啦。。叮铃叮铃叮铃。。");            Console.WriteLine();            teleRinged();        }    }      class Program    {        // 5.定义可以注册到事件中的方法 方法要符合事件类中事件的委托类型的规则        public static void MethodInEvent()        {            Console.WriteLine("电话响了,主人走过来了。");        }        public static void MethodInEvent2()        {            Console.WriteLine("电话响了,电视机自动静音了。");        }        static void Main(string[] args)        {            // 6.事件类初始化            TeleRingClass teleRing = new TeleRingClass();            // 7.事件类中事件成员对象接收来注册的方法 (注意这些方法在注册时只填写方法名不带签名和括号)            teleRing.teleRinged += MethodInEvent;            teleRing.teleRinged += MethodInEvent2;            // 8. 触发事件,即调用事件类中触发事件的方法,会依次执行注册了的方法            teleRing.CallTheRing();            Console.WriteLine();        }    }}

3.例子2执行结果:


例子2代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2  //带参数带返回值{   ///事件是:知道了圆的半径。  事件发生之后:自动计算圆的周长,自动计算圆的面积。    // 1.定义一个委托    public delegate double AfterGetTheRadius(double radius);    // 2.定义一个事件类    public class GetTheRadiusClass    {        // 3.事件类中包括:一个事件类型且接收已经定义的委托类型方法的事件成员        public event AfterGetTheRadius GetRadiusEvent;        // 4.事件类中包括:触发该事件类中事件的方法        public double GetTheRadius(double radius)        {            Console.WriteLine("得到圆的半径是: "+radius);            Console.WriteLine();            return GetRadiusEvent(radius);        }    }    class Program    {        // 5.定义可以注册到事件类中的方法        public static double GetLength(double radius)        {            var lenth=2 * (Math.PI) * radius;            Console.WriteLine("自动算出其周长是: " + lenth);            return lenth;        }        public static double GetArea(double radius)        {            var area=(Math.PI) * radius * radius;            Console.WriteLine("自动算出其面积是: "+area);            return area;        }              static void Main(string[] args)        {            // 6.实例化事件类            GetTheRadiusClass getRadius = new GetTheRadiusClass();            // 7.向事件类中注册方法            getRadius.GetRadiusEvent += GetLength;            getRadius.GetRadiusEvent += GetArea;            // 8.触发事件            var eventResult= getRadius.GetTheRadius( 10.00 ); //周长 62.8318   面积 314.159            Console.WriteLine();            Console.WriteLine("事件调用完毕的返回值是: " + eventResult);//输出 314.159        }    }}
4.你应该明白了,步骤是这样的:

1)定义一个委托
2)定义一个事件类

3)事件类中包括:一个事件类型且接收已经定义的委托类型方法的事件成员

4)事件类中包括:触发该事件类中事件的方法

5)定义可以注册到事件类中的方法

6)实例化事件类
7)向事件类中注册方法

8)触发事件(调用事件)

PS:如果你不知什么是委托,请先了解委托的概念,可见本人前一篇博客:
C#中的委托 一看即明 http://blog.csdn.net/xuanwuziyou/article/details/37698275


0 0
原创粉丝点击