欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#事件

程序员文章站 2022-07-16 18:45:35
...

一、事件是个什么鬼?有什么卵用?

事件其实就是一个特殊的委托,对事件的声名其实就是声明一个私有的委托变量
你先把什么是委托搞清楚,就知道委托和事件的关系了

事件就是对象之间通信的一种机制。
在面向对象的编程语言中,任何一个对象都可以有相应的事件。
例如:鼠标单击事件、鼠标移动事件、按钮单击事件等等。在按钮单击事件中,是鼠标对象向按钮对象发出的一个消息,所以就是鼠标和按钮两个对象通信的一种机制。

事件起到的作用我就用实际中的操作来表述下,希望你能明白。
事件有很多种:比如常用的有鼠标单击事件,鼠标移动事件,页面加载事件等等。
事件的作用就是来帮你完成任务,完成你想做得事。其实你只要明白如何运用事件就行,具体的概念比较抽象,一时也说不上来,你可以网上去查查,应该能查到。
比如鼠标单击事件:当你单击鼠标后肯定要发生某件事,比如弹出窗口,刷新页面,或者提交数据等。这时候就会触发鼠标单击事件,而你把你要做得事(程序中指方法当然也包括属性)写在该事件里,通过该事件来完成你想做得。
事件都是相对应的,比如说鼠标单击事件只有你在单击鼠标的时候才会触发,这时候才会执行该事件里的方法。

比如页面加载事件也就是说当页面加载的时候才会触发该事件。

或者参见某乎某答主回答:
https://www.zhihu.com/question/21638630

二、使用事件有啥需要注意的地方?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


//1、event和delegate的关系就好像字段和属性的关系
//2、event会限制delegate,不能够直接赋值操作,放置将委托替换掉,只能使用+=或-=来绑定或者解除绑定
//3、event还限定了delegate只能在定义的类中被调用

namespace learning
{
    public delegate void Something(string name);

    public class Student {

        // 事件 Event 就是delegate的“属性”
        public event Something something;
        public void Do() {
            something(name);
        }

        public Student(string name) {
            this.name = name;
        }

        private string name;

    }

    public class Teacher
    {
        public void Hungry() {
            Student s = new Student("老王");

            // 使用了 event 之后就不能够直接给委托赋值,必须使用 +=、-=来绑定/解绑
            s.something += new Something(A);

            // 同时使用了 event 之后就不能够在 Student 外调用委托
            //s.something("老张");不可以

            s.Do();
        }

        public void A(string name) {
            Console.WriteLine("hello ," + name);
        }
    }

    class Program{

        public static void Main(string[] args)
        {
            Teacher t = new Teacher();
            t.Hungry();
        }
    }
}

C#事件