NET 事件与委托

案例:定一个Person类,定一个监听年龄变化的事件,当本命年的时候祝贺一下。触发事件的地方要判断一下是不是事件null

事件语法:event Mydelegate mdl;

加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。只能+=、-=!

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace TestConsole

{

    delegate void MyDel();

    class Program

    {

        static void Main(string[] args)

        {

            person p = new person();

            p.QingZhu += ShowMsg;

            p.age = 24;

            Console.ReadKey();

        }

        static void ShowMsg()

        {

            Console.WriteLine("今年是你的本命年!恭喜你");

        }

    }

    class person

    {

        private int Age;

        public int age

        {

            get

            {

                return age;

            }

            set

            {

                if (value % 12 == 0)

                {

                    if (QingZhu != null)

                    {

                        QingZhu();//执行事件

                    }

                }

            }

        }

        public event MyDel  QingZhu;

    }

}

委托和事件的总结

委托的作用:占位,在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定)。在实际调用之前,需要为委托赋值,否则为null。

事件的作用: 事件的作用与委托变量一样,只是功能上比委托变量有更多的限制。(比如:1.只能通过+=或-=来绑定方法(事件处理程序)2.只能在类内部调用(触发)事件。)

(面试题)事件和委托的关系:事件由一个私有的委托变量和add_***和remove_***方法组成;

事件的非简化写法:声明一个私有的委托变量和add、remove方法。

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace TestConsole

{

    delegate void MyDel();

    class Program

    {

        static void Main(string[] args)

        {

            person p = new person();

            p.qingzhu += ShowMsg;

            p.age = 24;

            Console.ReadKey();

        }

        static void ShowMsg()

        {

            Console.WriteLine("今年是你的本命年!恭喜你");

        }

    }

    class person

    {

        private int Age;

        public int age

        {

            get

            {

                return age;

            }

            set

            {

                if (value % 12 == 0)

                {

                    if (this.QingZhu != null)

                    {

                        this.QingZhu();//执行事件

                    }

                }

            }

        }

        private  MyDel  QingZhu;

        public event MyDel qingzhu

        {

            add

            {

                this.QingZhu += value;

            }

            remove

            {

                this.QingZhu -= value;

            }

        }

    }

}

委托和事件的区别和关系

一种错误的说法“事件是一种特殊的委托”,事件时候是有一个私有委托和add、remove两个方法组成的。

委托用的比较多,事件只有开发WinForm、WPF的时候用的才比较多,而WinForm、WPF则不是学习重点。掌握“事件和语法”、“委托和事件的关系和区别(面试题)”即可。

事件、索引器、属性本质上都是方法。(面试题)接口中可以定义什么?

答:接口中只可以定义方法。接口中也可以定义“事件、索引器、属性”,因为他们本质上也都是方法。

原文地址:https://www.cnblogs.com/qiu18359243869/p/13163933.html