事件

来源:互联网 发布:垃圾页游 知乎 编辑:程序博客网 时间: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
原创粉丝点击