事件
来源:互联网 发布:垃圾页游 知乎 编辑:程序博客网 时间:2024/05/03 10:17
事件的重要事项
1、触发事件(raise event) 调用或触发事件的术语,当事件被触发时,所有注册到它的方法都会被依次调用
2、发布者(publisher) 让事件被其他类或结构可见并使用的类或结构
3、订阅者(subscriber) 把事件和发布者关联注册的类或结构
4、事件处理程序(event handler) 注册到事件的方法。可以在事件所在的类或结构中,或者在不同的类或结构中
class Program { static void Main(string[] args) { EventHanderA eha = new EventHanderA(); Promulgator prom = new Promulgator(); prom.AnonymityName += eha.EventA; // 增加事件处理方法 只能使用 += 的形式 prom.AnonymityName += EventHanderB.EventB; // 增加事件处理方法 // 移除事件处理方法 使用 -= 的形式 prom.OnTigEvent(); // 调用触发事件 Console.ReadKey(); } } ////1、 事件发布者 //class Promulgator //{ // public event EventHandler AnonymityName; // 声明事件 需要委托类型的名字 // private void TigEvent(object obj, EventArgs ags) // 触发事件方法 // { // AnonymityName?.Invoke(obj, ags); // 事件参数 参考 委托参数 /* 可简化代理操作 */ // } //} // 事件发布者 class Promulgator { //public delegate void EventHander(object sender,EventArgs e); // 系统预定义的标准事件委托 不用手动声明 public event EventHandler AnonymityName; // 声明事件 需要委托类型的名字 private void TigEvent(object obj, EventArgs ags) // 触发事件方法 { if(AnonymityName!=null) // 如果有可执行方法 { AnonymityName(obj, ags); // 事件参数 参考 委托参数 } } public void OnTigEvent() // 1、触发事件 { EventArgs e = new EventArgs(); TigEvent(this, e); } } // 2、订阅者 class EventHanderA { public void EventA(object sender, EventArgs e) // 4、事件处理程序 事件处理程序的 签名 和返回值类型必须和 事件委托一致 { Console.WriteLine("A class instance method"); } } // 订阅者 class EventHanderB { public static void EventB(object sender, EventArgs ags) // 4、静态事件处理程序 { Console.WriteLine("B class instance method"); } }
0 0