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

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

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

  • 相关阅读:
    Redis企业级数据备份与恢复方案
    使用canal增量同步mysql数据库信息到ElasticSearch
    SpringBoot基于数据库实现简单的分布式锁
    SpringBoot+ShardingSphere实现分库分表 + 读写分离
    SpringBoot 使用JestClient操作Elasticsearch
    Java 操作 MongoDB
    VS C#开发中WinForm中Setting.settings的作用
    Sql 触发器禁用和启用
    ROW_NUMBER over (order by **)
    Aspen 安装
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/13163933.html
Copyright © 2011-2022 走看看