C#在写事件时,具有五大因素,必不可少。示例如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
Form form = new Form(); //事件拥有者Form,事件Click
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();
}
}
}
运行结果如下:点击form,标题栏显示当前时间。
第二种情况:事件拥有者和事件响应者为同一个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;
namespace EventExample
{
class Program
{
static void Main(string[] args)
{
MyForm myForm = new MyForm(); //事件拥有者,事件响应者
myForm.Click += myForm.FormClick; //事件Click,事件订阅+=
myForm.ShowDialog();
}
}
class MyForm : Form //派生继承
{
internal void FormClick(object sender, EventArgs e) //事件处理器
{
this.Text= DateTime.Now.ToString(); ;
}
}
}
第三种情况,事件的响应者订阅着自己的事件拥有者的字段成员的某个事件