您的位置:首页 > 其它

事件理解及初识

2015-04-21 11:40 211 查看
类或对象可以通过事件向其他类或对象通知发生的相关事情

发行者确定何时引发事件,订户确定执行何种操作来响应该事件。

C#中的事件处理实际上是一种具有特殊签名的delegate

假设一个场景 :老师登记分数后,学生马上接收到分数

发布者首先要写的代码

1、定义一个委托和事件,写一个方法,当这个方法调用时触发事件通知订阅者

public class Teacher
{
public delegate void TellScoreEventHandler(object sender, ScoreEventArgs e);
public event TellScoreEventHandler tellScoreEvent;

/// <summary>
/// 通知订阅者事件发生
/// </summary>
/// <param name="e"></param>
public void OnTellScore(ScoreEventArgs e)
{
if (tellScoreEvent != null)
tellScoreEvent(this, e);
}

/// <summary>
/// 调用方法时,触发事件
/// </summary>
/// <param name="name"></param>
/// <param name="score"></param>
public void TellStudentSocre(string name,int score)
{
ScoreEventArgs scoreArgs = new ScoreEventArgs(name, score);
OnTellScore(scoreArgs);
}
}

/// <summary>
/// 自定义事件数据的类
/// </summary>
public class ScoreEventArgs : EventArgs
{
public int Score { get; set; }
public string Name { get; set; }

public ScoreEventArgs(string name,int score)
{
this.Name = name;
this.Score = score;
}
}


2、先添加一个订阅者,后调用发布者中能触发事件的方法

Student stu = new Student();
Teacher teacher = new Teacher();
teacher.tellScoreEvent += new Teacher.TellScoreEventHandler(stu.teacher_tellScoreEvent);
teacher.TellStudentSocre("奋斗的QB", 100);


3、在订阅者里处理,当事件发生时,如何处理

public class Student
{
//当事件发生后,如何处理
public void teacher_tellScoreEvent(object sender, ScoreEventArgs e)
{
MessageBox.Show(e.Name + "考了" + e.Score.ToString());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: