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# 事件的使用