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

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

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

     

    更多技术请关注

  • 相关阅读:
    <转>反调试技巧总结原理和实现
    反调试功能<IsDebuggerPresent>
    通过取得MAC地址判断是否在VM中
    任何值得拥有的东西
    我的程序里
    吸引力法则之谜——十一条被遗忘的定律
    要成功,请忘掉自尊
    我是个只顾着想,却不去做的人
    现在有12个金币,其中一个有质量问题(或重或轻),还有一个无砝码的天平,让你称三次怎么样找到那个有质量问题的金币?
    惆怅
  • 原文地址:https://www.cnblogs.com/dullbaby/p/10910791.html
Copyright © 2011-2022 走看看