.NET图像界面按钮的clicked事件浅谈(3)


    public class ObserverManager:IObservable
    {
        protectedArrayList arrList;
        publicObserverManager()
        {
            arrList = newArrayList();
        }
        public void Register(IObserverobserver)
        {
            arrList.Add(observer);
        }
        public void UnRegister(IObserverobserver)
        {
            if(arrList.Contains(observer))
            {
                arrList.Remove(observer);
            }
        }
        public void NotifyObservers(doublesize)
        {
            DrawEventArgse = new DrawEventArgs(size);
            foreach(IObserver observer inarrList)
            {
                observer.Notify(e);
            }
        }
        public void SizeChanged(doublesize)
        {
            NotifyObservers(size);
        }
    }


下面是调用代码,

复制代码 代码如下:


        static void Main(string[]args)
        {
            ObserverManageroManager = new ObserverManager();
            NewRectanglerect = new NewRectangle(oManager);
            NewSquaresquare = new NewSquare(oManager);
            oManager.SizeChanged(5);
            square.Detach();
            oManager.SizeChanged(10);
     Console.ReadLine();
        }


最好运行下代码,这样可以更easy的理解这两种模式微妙的差别了。
对事件来说,还可以显式的用add和remove编写事件访问器,事件访问器通常有编译器生成,所以可以显式的用事件访问器修改DrawManager类型,

复制代码 代码如下:


    public class DrawManager
    {
        privateevent ShapeSizeChangedm_SizeChanged;
        privatereadonly objectm_lock = new object();
        public event ShapeSizeChangedSizeChanged
        {
            add
            {
                lock(m_lock)
                {
                    m_SizeChanged += value;
                }
            }
            remove
            {
                lock(m_lock)
                {
                    m_SizeChanged -= value;
                }
            }
        }
        protectedvoid OnSizeChanged(DrawEventArgse)
        {
            ShapeSizeChangedtemp = m_SizeChanged;
            //是否有委托与该事件关联
            if(temp != null)
            {
                temp(this,e);
            }
        }
        public void SizeChange(doublesize)
        {
            DrawEventArgse = new DrawEventArgs(size);
            OnSizeChanged(e);
        }
    }

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgsgs.html