public class CustomEventArgs :EventArgs
{
private string msg;
public CustomEventArgs(string s)
{
msg = s;
}
public string Message
{
get { return msg; }
set { msg = value; }
}
}
public delegate void CustomEventHandler(object sender, CustomEventArgs ags);
//class that publishes an event
class Publisher
{
//Declare the event using EventHandler
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
public void DoSomething()
{
OnRaiseCustomEvent(new CustomEventArgs("Did something"));
}
protected virtual void OnRaiseCustomEvent(CustomEventArgs e)
{
EventHandler<CustomEventArgs> handler = RaiseCustomEvent;
if (handler != null)
{
e.Message += String.Format("at {0}", DateTime.Now.ToString());
handler(this, e);
}
}
}
//Class that subscribes to an event
class Subcribe
{
public string ID;
public Subcribe(string id, Publisher publish)
{
ID = id;
publish.RaiseCustomEvent += HandleCustomEvent; //这地方可以调用多个事件处理程序
}
// Subscribe to the event using C# 2.0 syntax
void HandleCustomEvent(object sender,CustomEventArgs e)
{
Console.WriteLine(ID + " received this message {0}", e.Message);
}
}
// public event CustomEventHandler customEventHandler; //声明事件,并将委托用作类型
public static void Main()
{
Publisher pub = new Publisher();
Subcribe sub1 = new Subcribe("sub1", pub); //订阅 并且在触发的时候会调用相应的处理事件的函数
Subcribe sub2 = new Subcribe("sub2", pub);
//调用方法,里面有一个触发事件的虚方法(事件被复制)
pub.DoSomething();
Console.WriteLine("Press Enter to Close");
Console.Read();
事件的订阅与处理
最新推荐文章于 2023-11-23 15:57:10 发布