C#事件.

文章详细介绍了C#中的事件和委托概念,事件作为委托的封装,具有更严格的操作限制。通过示例代码展示了如何声明和使用事件,包括事件的注册(+=)和注销(-=)以及多播特性。同时解释了在不同类中如何调用和绑定事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件是一种特殊的委托,本质上来讲事件就是委托。

事件是在委托类型变量前加上event关键字,其本质是用来对委托类型的变量进行封装,类似于类的属性字段的封装。事件是对类的引用可以把事件看作一个类,当使用事件的时候需要先声明一个委托的字段,委托字段可以是匿名方法也可以是带参数的方法,但是委托字段的方法关键字必需是void声明的实例方法,声明的事件的字段的关键字使用static关键字定义的静态方法再加上event关键字,后面在加上委托定义的方法最后在加上一个事件的执行方法;

代码实例如下:
声明的代理的字段和声明的关键字的字段必须放在同一个类里面

public  class WaterTest {
   public  delegate void WaterDelegate(int a);
   public  static event WaterDelegate waterDelegateEvent;
   public static void  WaterTestMothod()
   {
       for (int i = 0; i < 100; i++) {          
             if (i >=90)
             {
                waterDelegateEvent(i);      
             }
       }
        
    }
}

事件使用时必须要在事件之前使用委托,事件可以使用委托的多播的属性进行调用方法,但是事件可以直接使用+=链接两个方法而不需要先使用=链接一个方法。委托可以使用=+=来将函数注册到委托的变量上,使用-=来将函数注销。而事件则有着更严格的限制,事件只能使用+=来将函数注册到其上,使用-=来将函数注销。

在使用事件的时候需要给事件进行绑定,调用不需要new类的实例直接使用类名调用事件的名称即可,然后通过+=为事件进行注册委托,如果需要执行的方法和事件不是同一个类那么就需要在进行事件委托的时候在+=的后面加上需要调用方法的类名, 然后在用类名打点调用要执行事件的方法名。

代码如下:

namespace ProgramEvnet
{
    internal class Program
    {
        static void Main(string[] args)
        {
            
            //绑定事件的方法
            WaterTest.waterDelegateEvent += Water1;
            WaterTest.waterDelegateEvent += Water2;
            WaterTest.waterDelegateEvent += Test1.Water3;            //执行烧水方法
            WaterTest.WaterTestMothod();
            Console.ReadKey();
        }

        public static void Water1(int a) {
            Console.WriteLine($"水温度:{a}度,可以用杯子接水了");

        }
        public static void Water2(int a) {
            Console.WriteLine($"水温度:{a}度,可以用桶接水了");
        }        
    }

    class Test1 {

        public static void Water3(int a)
        {
            Console.WriteLine($"水温度:{a}度,可以用盆接水了");
        }
    }
 public  class WaterTest {

        public  delegate void WaterDelegate(int a);
        public  static event WaterDelegate waterDelegateEvent;
        public static void  WaterTestMothod()
        {
            for (int i = 0; i < 100; i++) { 
            
                 if (i >=90)
                {
                    waterDelegateEvent(i);      
                }
            
            } 
        
        }    
    
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值