事件,委托

1.什么是委托

通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器

2.委托语法

准备一个方法: public string A(string userName){}

public string B(string userName){}

声明委托类:delegate string Dele(string userName);

创建委托对象:Dele dele = new Dele(A);

或 Dele del = A;

追加方法: del +=B;

删除方法: del -=B;

调用委托: del ("张三");

3.多播委托

通常将包含多个方法指针的委托叫做多播委托

其实每个用户定义的委托类型编译后都是一个继承于多播委托的类

 

4.委托的目的

(1)能将方法作为参数和返回值传递

(2)调用一个委托,执行N个方法(多播委托)

5.委托的缺点

不进行控制的缺点:可以使用Click=null来清除所有注册的事件,可以用Click()来假冒事件的触发。

解决方案,把委托成员做成private的,然后增加AddClickEventHandler、RemoveClickEventHandler两个public方法

6.什么是事件

对委托变量的可访问性进行控制封装

事件就是一个特殊的委托(个人理解)

语法:public delegate void A(string name);

public event A aa;//创建事件委托(本质还是委托对象)

event会自动生成一个private delegate变量和两个函数: add和remove,C#编译器用这两个方法支持+=和-=操作符

用一个简单的小案例:

    class Program
    {
        static void Main(string[] args)
        {
            //实例化类
            Water water = new Water();
            Alarm alarm = new Alarm();
            Display display = new Display();

            water.EventWater += alarm.MakeAlarm;//水烧开会提示警报器
            water.EventWater += display.Show;//显示

            water.BoilWater();//烧水  调用其方法
            Console.ReadKey();
        }
    }

    //定义一个委托
    public delegate void WTHander(int a);

    //热水器
    public class Water
    {
        //温度
        int temp;
        public event WTHander EventWater;//声明事件

        //烧水
        public void BoilWater()
        {
            for (int i = 0; i <= 100; i++)
            {
                temp = i;
                if (temp > 95)
                {
                    if (EventWater != null)
                    {
                        EventWater(temp);//调用注册对象的方法
                    }
                }
            }
        }
    }   

    //警报器
    public class Alarm
    {
        
        public void MakeAlarm(int a)
        {
            Console.WriteLine("Alarm:滴滴滴,水已经{0}度了", a);
           
        }
    }

     //显示器
    public class Display
    {
        public void Show(int a)
        {
            Console.WriteLine("Display:水快烧开了,当前温度是{0}度", a);
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值