C#事件实现步骤
1、定义类型容纳所有发送给事件通知接收者的附加信息
事件引发时,引发事件的对象可能希望向接收事件通知的对象传递一些附加信息。这些附加信息需要封装到它自己的类中。根据约定,这个类应该派生自 System.EventArgs,且类名应该以 EventArgs结束。
internal class NewMailEventArgs:EventArgs
{
private readonly string m_from, m_to, m_subject;
public NewMailEventArgs(string from,string to,string subject)
{
m_from = from;
m_to = to;
m_subject = subject;
}
/// <summary>
/// 发件人
/// </summary>
public string From { get {return m_from;} }
/// <summary>
/// 收件人
/// </summary>
public string To { get {return m_to;} }
/// <summary>
/// 主题
/// </summary>
public string Subject { get {return m_subject;} }
}
2、定义事件成员
事件成员使用C#关键字 event定义,其中, NewMail是时间名称,事件成员的类型是 EventHandler
internal class MailManager
{
//2、定义事件成员
public event EventHandler<NewMailEventArgs> NewMail;
}
3、定义负责引发事件的方法来通知事件的登记的对象
internal class MailManager
{
//2、定义事件成员
public event EventHandler<NewMailEventArgs> NewMail;
//3、定义负责引发事件的方法来通知事件的登记的对象
protected virtual void OnNewMail(NewMailEventArgs e)
{
//通知登记的对象
NewMail?.Invoke(this, e);
}
}
4、定义方法将输入转化为期望事件、也可以是属性
internal class MailManager
{
//2、定义事件成员
public event EventHandler<NewMailEventArgs> NewMail;
//3、定义负责引发事件的方法来通知事件的登记的对象
protected virtual void OnNewMail(NewMailEventArgs e)
{
//通知登记的对象
NewMail?.Invoke(this, e);
}
//4、定义方法将输入转化为期望事件
public void SimulateNewMail(string from, string to, string subject)
{
NewMailEventArgs e = new NewMailEventArgs(from, to, subject);
OnNewMail(e);
}
}
5、设计侦听事件类型
internal sealed class Fax
{
public Fax(MailManager mm)
{
//注册回调方法
mm.NewMail += FaxMsg;
}
//事件处理方法
private void FaxMsg(object sender, NewMailEventArgs e)
{
Console.WriteLine($"From = {e.From},To = {e.To},Subject = {e.Subject}");
}
//注销对事件的订阅
public void Unregister(MailManager mm)
{
mm.NewMail -= FaxMsg;
}
}
本文参考书籍 CLR via C#
标签:string,C#,事件,NewMailEventArgs,NewMail,public,subject From: https://www.cnblogs.com/slowly-snail/p/17032502.html