c# 与java 相同实现 自定义事件的触发及监听

来源:互联网 发布:东京物语知乎 编辑:程序博客网 时间:2024/05/30 04:06
    java
1,先自定义一个事件public class MyEvent extends java.util.EventObject{    public MyEvent(Object source)    {        super(source);    }}2,再自定义一个监听器public class MyListener implements java.util.EventListener{ //这里是当事件发生后的响应过程    public void EventActivated(MyEvent me)    {        System.out.println("事件已经被触发");    }}3,以下这个类为触发事件的事件源public class MyObject {    private Vector vectorListeners=new Vector();        public synchronized void addMyListener(MyListener ml)    {        vectorListeners.addElement(ml);    }        public synchronized void removeMyListener(MyListener ml)    {        vectorListeners.removeElement(ml);    }        protected void activateMyEvent()    {        Vector tempVector=null;                MyEvent e=new MyEvent(this);                synchronized(this)        {            tempVector=(Vector)vectorListeners.clone();                        for(int i=0;i<tempVector.size();i++)            {                MyListener ml=(MyListener)tempVector.elementAt(i);                ml.EventActivated(e);            }        }            }     //定义一个公用方法用于触发事件    public void test()    {        activateMyEvent();    }   }4,测试类public class Test {public static void main(String[] args)   {       MyObject mo=new MyObject();  //注册该事件       mo.addMyListener(new MyListener());       //触发该事件       mo.test();    }}
        c#
 interface IEvent    {        object Source { get; set; }    }    interface IListener    {        void EventActivated(IEvent e);    }    class MyEvent : IEvent    {        public MyEvent(object source)        {            _source = source;        }        private object _source;        #region IEvent 成员        public object Source        {            get            {                return _source;            }            set            {                _source = value;            }        }        #endregion    }    class MyListener : IListener    {        #region IListener 成员        public void EventActivated(IEvent e)        {            throw new NotImplementedException();        }        #endregion    }    class MyObject    {        private List<IListener> _listeners = new List<IListener>();        public void addListener(IListener listener)        {            _listeners.Add(listener);        }        public void removeListener(IListener listener)        {            _listeners.Remove(listener);        }        protected void activateEvent()        {            MyEvent e = new MyEvent(this);            foreach (IListener listener in _listeners)                listener.EventActivated(e);        }        public void test()        {            activateEvent();        }    }
原创粉丝点击