.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个消息框出来。
通过上边,我对事件有了一个基本的了解!
---本博客是学习以后记录知识,如有侵权,请联系删除!!!