c# 事件和委托

 

        public static string str = string.Empty;
        private void Border_MouseLeftButtonUp_3(object sender, MouseButtonEventArgs e)
        {
            /* 实例化对象,第一次没有触发事件, 因为对象中的 ChangeNum 事件没有绑定(注册)事件*/
            EventTest es = new EventTest(); 
            es.SetValue();
            subscribEvent v = new subscribEvent();
            /* 注册事件:将 subscribEvent 类中的普通方法绑定(注册)到 EventTest 类中定义的 ChangeNum 事件。*/
            es.ChangeNum += new EventTest.NumManipulationHandler(v.printf); 
            es.SetValue();
        }

        #region 事件
        /***********发布器类***********/
        public class EventTest
        {
            public delegate void NumManipulationHandler();
            public event NumManipulationHandler ChangeNum;
            public void OnNumChanged()
            {
                if (ChangeNum != null)
                {
                    /* 事件被触发,执行与事件绑定(注册)的方法*/
                    ChangeNum(); 
                }
                else
                {
                    str += "事件没有被触发!";
                }
            }
            public EventTest()
            {
                SetValue();
            }
            public void SetValue()
            {
                OnNumChanged();
            }
        }
        /***********订阅器类***********/
        public class subscribEvent
        {
            /*普通方法*/
            public void printf()
            {
                str += "触发了事件!";
            }
        }
        #endregion

 

posted @ 2018-08-22 16:55  紫晶城  阅读(208)  评论(0编辑  收藏  举报