程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 每天進步一點--c#基礎鞏固,事件、委托

每天進步一點--c#基礎鞏固,事件、委托

編輯:C#入門知識

      要想技術有所提高,就是把有些問題真正的弄懂弄明白,我從事C#開發兩年了,一直對事件委托等概念一知半解,有時候博客園上看看別的大牛的文章,看看懂了就過去了,時間長了又忘了,真正理解還是要自己動手弄些例子,搞懂這些概念,我寫文章也是出於這個目的,希望和大家一塊學習進步。

      我還是拿經典的例子來說明:貓叫,老鼠跑,主人吵醒了。

      我們用事件的方法來實現,把貓叫作為觸發事件的方法,綁定在這個事件上的方法都會被觸發。

先用網上大家的例子:

    public class Cat
    {
        /// <summary>
        /// 貓叫方法    
        /// </summary>
        public void Miao()
        {
            Console.WriteLine("喵喵喵喵喵喵");
            if (OnMiao != null)
                OnMiao(this,EventArgs.Empty);
        }
        /// <summary>
        /// 貓叫事件
        /// </summary>
        public event EventHandler OnMiao;
    }

  

 public class Master
    {
        public Master()
        {
        }
        /// <summary>
        /// 主人被叫醒了
        /// </summary>
        public void Wake()
        {
            Console.WriteLine("死貓叫啥叫,吵我睡覺!!!");
        }
    }

  

public class Mouse
    {
        public Mouse()
        {
        }
        /// <summary>
        /// 老鼠跑
        /// </summary>
        public void Run()
        {
            Console.WriteLine("貓來了,快跑!!!!");
        }
    }

  客戶端代碼

    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse = new Mouse();
            Master master = new Master();

            cat.OnMiao += delegate { mouse.Run(); };
            cat.OnMiao += delegate { master.Wake(); };

            cat.Miao();
        }

    }

  這個辦法可以實現,貓叫,老鼠跑,主人醒。但如果我想拓展下呢,主人叫有好幾只貓,每只貓叫的聲音都不一樣,主人吵醒後要知道哪只貓把他吵醒了。

現在我們改寫Cat類

/// <summary>
    /// 我們自定義事件數據
    /// </summary>
    public class CatEventArgs : EventArgs
    {
        public string CatName { get; set; }
    }
    public class Cat
    {
        /// <summary>
        /// 定義事件委托
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void CatEventHandler(object sender, CatEventArgs e);
        public Cat()
        {
        }
        /// <summary>
        /// 貓叫
        /// </summary>
        public void Miao()
        {
            Console.WriteLine("喵喵喵喵喵喵");
            if (OnMiao != null)
            {
                CatEventArgs catEventArgs = new CatEventArgs();
                catEventArgs.CatName = "Tom";
                OnMiao(this, catEventArgs);
            }
        }
        /// <summary>
        /// 貓叫完成事件
        /// </summary>
        public event CatEventHandler OnMiao;
    }

  客戶端代碼

    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse = new Mouse();
            Master master = new Master();

            cat.OnMiao += cat_OnMiao;
            cat.OnMiao += delegate { master.Wake(); };

            cat.Miao();
        }

        static void cat_OnMiao(object sender, CatEventArgs e)
        {
            Console.WriteLine(string.Format("{0}貓在叫",e.CatName));
        }
    }

  這樣就知道哪只貓叫了,關鍵是我們自定義了CatEventArgs,這個類繼承了EventArgs,可以傳遞事件信息,自定義信息,並且自定義事件委托public delegate void CatEventHandler(object sender, CatEventArgs e);

自己的小例子,大牛勿笑;新的一年祝大家心想事成,更上一層樓

                                                                                                                                                                                                  --每天有點進步

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved