C#中的事件 一看即明

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值