• 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则不是学习重点。掌握“事件和语法”、“委托和事件的关系和区别(面试题)”即可。

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

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

  • 相关阅读:
    发现另一种简便的完全居中css写法 element.style { width: 500px; height: 200px; background: #eee; position: absolute; margin: auto; top: 0; left: 0; bottom: 0; right: 0; }
    子网掩码随笔
    C# MVC网站自动由HTTP转为HTTPS
    c++中的void*
    权利的游戏
    字符串
    字符串
    权利的游戏 S0803
    加权有向图
    加权无向图
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/13163933.html
Copyright © 2020-2023  润新知