事件是一种固定格式的委托。
关于事件处理机制:
事件包含:编写发布者类(事件源, 必须有一个引发事件)、编写订阅者类、订阅者对事件的处理(事件处理方法)、事件绑定事件处理方法
比如教师上课这个例子:
发布者类:教师(引发事件为开始上课)
订阅者类:学生
订阅者对事件的处理:1,听课 2,做笔记 3,看书
在编写事件前要先编写一个类封装要传递给订阅者的数据
public class StartEventArgs : EventArgs
= {
//翻开第几页
public readonly int page;
public StartEventArgs(int page)
{
this.page = page;
}
}
关于教师类:
public class Teacher
{
//保存老师名字,用来测试传递给订阅者
public string TName;
//声明委托
public delegate void startEventHandler(Object sender, StartEventArgs e);
//声明事件
public event startEventHandler start;
//引发事件
public void StartEvent(StartEventArgs e)
{
if (start != null)
start(this, e);
}
public void Start()
{
StartEventArgs e=new StartEventArgs(page);
StartEvent(e);
}
关于学生类:(可以分开3个类来写)
public class Student
{
public void Listener(Object sender, StartEventArgs e)
{
Teacher teacher=(Teacher)sender;
Console.WriteLine("授课老师为{0}",teacher.TName);
Console.WriteLine("正在听课,翻开{0}页",e.page);
}
public void Record(Object sender, StartEventArgs e)
{
//与上面一样,省略
Console.WriteLine("正在做笔记,翻开{0}页",e.page);
}
public void Reading(Object sender, StartEventArgs e)
{
//与上面一样,省略
Console.WriteLine("正在看书,翻开{0}页",e.page);
}
}
最后是为事件绑定事件处理的方法(即上方的 Listener(),Record(),Reading()方法 )
static void Main(string[] args)
{
Teacher teacher=new Teacher();
//用匿名对象注册方法
teacher.start+=(new Student()).Listener;
teacher.start+=(new Student()).Record;
teacher.start+=(new Student()).Reading;
//调用引发事件
teacher.Start();
Console.ReadKey();
}
关于事件处理机制:
事件包含:编写发布者类(事件源, 必须有一个引发事件)、编写订阅者类、订阅者对事件的处理(事件处理方法)、事件绑定事件处理方法
比如教师上课这个例子:
发布者类:教师(引发事件为开始上课)
订阅者类:学生
订阅者对事件的处理:1,听课 2,做笔记 3,看书
在编写事件前要先编写一个类封装要传递给订阅者的数据
public class StartEventArgs : EventArgs
= {
//翻开第几页
public readonly int page;
public StartEventArgs(int page)
{
this.page = page;
}
}
关于教师类:
public class Teacher
{
//保存老师名字,用来测试传递给订阅者
public string TName;
//声明委托
public delegate void startEventHandler(Object sender, StartEventArgs e);
//声明事件
public event startEventHandler start;
//引发事件
public void StartEvent(StartEventArgs e)
{
if (start != null)
start(this, e);
}
public void Start()
{
StartEventArgs e=new StartEventArgs(page);
StartEvent(e);
}
关于学生类:(可以分开3个类来写)
public class Student
{
public void Listener(Object sender, StartEventArgs e)
{
Teacher teacher=(Teacher)sender;
Console.WriteLine("授课老师为{0}",teacher.TName);
Console.WriteLine("正在听课,翻开{0}页",e.page);
}
public void Record(Object sender, StartEventArgs e)
{
//与上面一样,省略
Console.WriteLine("正在做笔记,翻开{0}页",e.page);
}
public void Reading(Object sender, StartEventArgs e)
{
//与上面一样,省略
Console.WriteLine("正在看书,翻开{0}页",e.page);
}
}
最后是为事件绑定事件处理的方法(即上方的 Listener(),Record(),Reading()方法 )
static void Main(string[] args)
{
Teacher teacher=new Teacher();
//用匿名对象注册方法
teacher.start+=(new Student()).Listener;
teacher.start+=(new Student()).Record;
teacher.start+=(new Student()).Reading;
//调用引发事件
teacher.Start();
Console.ReadKey();
}