.net高级技术—事件初识

1.事件基于委托,为委托提供了一种发布/订阅机制 。在.NET架构内到处都能看到事件。在Windows应用程序中。Button类提供了CLick()事件。这类事件就是委托。触发Click事件时调用的处理程序方法需要得到定义,而其参数由委托类型定义。

2.下面用一个简单的例子来看看事件的使用

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

  public class Person
    {
        private int age;
        public int Age
        {
            get
            {
                return this.age;
            }
            set
            {
                this.age = value;
                if(this.age%12==0)
                {
                    if (OnBMN!=null)
                    {
                        OnBMN();
                    }
                }
            }
        }
        public event Action OnBMN;
    }
  static void Main(string[] args)
        {
            Person p = new Person();
            p.OnBMN += P_OnBMN;
            p.Age = 12;
            Console.WriteLine(p.Age);
            p.Age = 13;
            Console.WriteLine(p.Age);
            p.Age = 48;
            Console.WriteLine(p.Age);
            Console.ReadKey();
        }

        private static void P_OnBMN()
        {
            Console.WriteLine("你好,我是事件触发呀!");
        }

运行结果:

3.事件与委托的关系:

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

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

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

 public class Person
    {
        private int age;
        public int Age
        {
            get
            {
                return this.age;
            }
            set
            {
                this.age = value;
                if(this.age%12==0)
                {
                    if (this.onBMN!=null)
                    {
                        this.onBMN();
                    }
                }
            }
        }
        //public event Action OnBMN;//简便写法
        private event Action onBMN;
        public event Action OnBMN
        {
            add
            {
                this.onBMN += value;
            }
            remove
            {
                this.onBMN -= value;
            }
        }
    }

这是最原始的写法,我们前面写的那种方式是简化写法,最终由编译器帮我们改成后面这种写法!

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

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

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

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

4.简单看下窗体事件

添加一个Button,进入Click事件

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("222");
        }

然后当你单击按钮时,会弹出对话框呢?

我们进入Designer.cs去看看呢

跳到Click定义

转到EventHandler定义:

这就是为什么我们单击按钮会出现对话框

我们给它加入一个方法。

发现就会弹出2个消息框出来。

通过上边,我对事件有了一个基本的了解!

---本博客是学习以后记录知识,如有侵权,请联系删除!!!

猜你喜欢

转载自blog.csdn.net/qq_33407246/article/details/88914271
今日推荐