事件的拥有者(Event source)
事件就是通知别人的工具。不会主动通知别的对象,只有当事件的拥有者明确告诉事件的成员,你去通知吧,事件才会起作用。
事件的成员(Event)
事件的响应者(Event Subscriber)
事件触发后,都有哪些对象或者类被通知到了。订阅了事件的对象或者类
事件处理器
事件响应者的方法成员。
事件订阅
1-事件拥有者通知谁?这个谁一定是订阅了这个对象
2- 什么的方法才能处理这个事件。 举例:孩子饿了,你作为事件的响应者,要明白孩子要吃了,这时候你得做饭。 事件处理器要和事件做一个约定,不然可能不管孩子怎么样,你都用做饭的方法来糊弄。这个约定就是委托
3- 事件的响应者具体拿哪个方法来处理事件。
一个简单的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Timer timer = new Timer(); //timer是事件的拥有者
timer.Interval = 1000;
Boy boy = new Boy();//boy对象是事件响应者
Girl girl = new Girl();
timer.Elapsed += boy.Action;//Elapsed是事件成员 +=操作符事件订阅,事件和事件处理器绑定
timer.Elapsed += girl.Action;
timer.Start();
Console.ReadLine();
}
}
class Boy
{
internal void Action(object sender, ElapsedEventArgs e) //事件处理器,自动生成的action方法
{
Console.WriteLine("Jump");
}
}
class Girl
{
internal void Action(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Sing");
}
}
}
第二个例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Form form = new Form();
Controller controller = new Controller(form);
form.ShowDialog();
}
}
class Controller
{
private Form form;
public Controller(Form form)
{
if (form!=null)
{
this.form = form;
this.form.Click += this.FormClicked;
}
}
private void FormClicked(object sender, EventArgs e)
{
this.form.Text = DateTime.Now.ToString();
}
}
}
第三个例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
MyForm form = new MyForm();
form.Click += form.FormClicked;
form.ShowDialog();
}
}
class MyForm : Form //派生,继承
{
internal void FormClicked(object sender, EventArgs e)
{
this.Text = DateTime.Now.ToString();
}
}
}
派生
在原有的功能基础上实现新的功能