事件
/* 事件 定义事件需要用委托类型的去声明一个事件。 */ using System; namespace Frank { public class Test { public delegate string Get(string x);//自定义委托 //简写模式的事件 public event Get NewEvent;//自从有了EventHandler泛型委托后就在也不需要自己定义委托了。它有两个参数,第一个是调用者,第二个是T类型。还定义了约束。 //完整模式的事件定义,类似于属性和字段。编译器自动的添加的。 /* public event Get NewEvent2 { add { Get += value; } remove { Get = value; } }*/ public delegate void Pr<T>() where T : struct;//创建一个泛型委托,然后定义约束。 public event EventHandler Event2;//系统系统的无返回值的委托。带两个参数 //程序入口 public static void Main(string[] args) { Test t = new Test(); t.NewEvent = t.Set;//为自定义委托类型的时间添加方法 t.ExecEvent("123");//执行自定义事件 t.Event2 = t.Methods; t.Event2 += t.Methods;//给事件添加方法。也可以叠加,所以使用+= t.Event2 -= t.Methods;//取消一个订阅 t.ExecEvent2(); } public void ExecEvent(string str) { if(NewEvent!=null) { NewEvent(str); } } public void ExecEvent2() { if(Event2!=null) { Event2(this,null);//执行事件 } } public void Methods(object t,EventArgs e) { Console.WriteLine("Hello!"); } public string Set(string str) { Console.WriteLine(str); return str; } } }