最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中的委托、事件學(xué)習(xí)筆記

 更新時(shí)間:2015年01月20日 10:04:58   投稿:junjie  
這篇文章主要介紹了C#中的委托、事件學(xué)習(xí)筆記,本文講解了委托delegate、事件的相關(guān)知識(shí)并給出代碼實(shí)例,需要的朋友可以參考下

1.委托delegate

委托delegate也是一種類型,在任何可以聲明類的地方都可以聲明委托,它將方法當(dāng)做另一個(gè)方法的參數(shù)進(jìn)行傳遞,這樣就可以傳遞不同的方法,完成不同的功能,使程序具有很好的可擴(kuò)展性。

舉例:

假設(shè)這里有一臺(tái)電腦,有人會(huì)用它寫程序,有人會(huì)用它打游戲,有人會(huì)用它看電影,有人會(huì)用它邊聽(tīng)音樂(lè)邊玩游戲,有人會(huì)用它邊聽(tīng)音樂(lè)邊看文檔,邊上QQ。

這臺(tái)電腦可以抽象成一個(gè)類Computer,里面有個(gè)方法DoWork,所有的人都要通過(guò)這個(gè)方法來(lái)做自己的事情。

不用委托的時(shí)候我們可以實(shí)現(xiàn)一些固定的東西,不夠靈活:

例如:

復(fù)制代碼 代碼如下:

class Program {
        static void Main(string[] args) {
            Computer computer = new Computer();
            computer.DoWork("豬八戒", "在看電影!");
            computer.DoWork("沙和尚", "在寫程序!");
            computer.DoWork("孫悟空", "在玩游戲!");
        }
    }

    public class Computer {
        public void DoWork(string name, string work) {
            Console.WriteLine("{0}{1}", name, work);
        }
    }

上面的代碼,很死板,調(diào)用DoWork的時(shí)候只能做一件事情。

所以下面輪到委托登場(chǎng)了。

代碼如下:

復(fù)制代碼 代碼如下:

public delegate void WorkEventHandle(string name);

    class Program {
        static void Main(string[] args) {
            Computer computer1 = new Computer();
            WorkEventHandle work = Do1;
            computer1.DoWork("孫悟空", work);

            Console.WriteLine("");

            work = Do2;
            computer1.DoWork("八戒", Do2);
        }

        static void Do1(string name) {
            Console.WriteLine("{0}在上QQ!", name);
            Console.WriteLine("{0}在聽(tīng)音樂(lè)!", name);
            Console.WriteLine("{0}在玩游戲!", name);
        }

        static void Do2(string name) {
            Console.WriteLine("{0}在聽(tīng)音樂(lè)!", name);
            Console.WriteLine("{0}在寫代碼!", name);
        }
    }

    public class Computer {
        public void DoWork(string name, WorkEventHandle Work) {
            Work(name);
        }
    }

委托總結(jié):

      優(yōu)點(diǎn):委托可以作為方法的一個(gè)參數(shù)來(lái)傳遞。誰(shuí)要調(diào)用Computer里的DoWork來(lái)完成自己的事情,誰(shuí)就實(shí)現(xiàn)委托綁定的方法,這樣就可以按照自己的需求傳遞不同的方法,使程序具有了很好的擴(kuò)展性。

      缺點(diǎn):我們可以隨意的給委托進(jìn)行賦值,這樣就破壞了程序的封裝性。

2. 事件

為了彌補(bǔ)委托的缺陷,所以事件出現(xiàn)了,我們只能對(duì)事件進(jìn)行“+=”和“-=”操作,不可以對(duì)事件進(jìn)行賦值(=)操作。
上面的實(shí)例用事件實(shí)現(xiàn)如下:

復(fù)制代碼 代碼如下:

public delegate void WorkEventHandle(string name);

    class Program {
        static void Main(string[] args) {
            Computer computer1 = new Computer();
            computer1.Work += new WorkEventHandle(Do1);

            computer1.DoWork("孫悟空");

            Console.WriteLine("");
            computer1.Work += new WorkEventHandle(Do2);

            computer1.DoWork("八戒");
        }


        static void Do1(string name) {
            Console.WriteLine("{0}在上QQ!", name);
            Console.WriteLine("{0}在聽(tīng)音樂(lè)!", name);
            Console.WriteLine("{0}在玩游戲!", name);
        }

        static void Do2(string name) {
            Console.WriteLine("{0}在聽(tīng)音樂(lè)!", name);
            Console.WriteLine("{0}在寫代碼!", name);
        }
    }

    public class Computer {
        public event WorkEventHandle Work;
        public void DoWork(string name) {
            if (Work != null) {
                Work(name);
            }
        }
    }

總結(jié):

委托既可以進(jìn)行“+=”和“-=”操作,也可以進(jìn)行賦值(=)操作,委托不具有封裝性
事件只可以進(jìn)行“+=”和“-=”操作,事件具有封裝性。

相關(guān)文章

  • C#中foreach實(shí)現(xiàn)原理詳解

    C#中foreach實(shí)現(xiàn)原理詳解

    這篇文章主要為大家詳細(xì)介紹了C#中foreach實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • c#定期刪除文件的實(shí)操方法

    c#定期刪除文件的實(shí)操方法

    在本篇文章里小編給大家分享了關(guān)于c#定期刪除文件的方法和步驟,有需要的朋友們可以學(xué)習(xí)下。
    2019-02-02
  • C#中如何利用正則表達(dá)式判斷字符

    C#中如何利用正則表達(dá)式判斷字符

    這篇文章主要介紹了C#中利用正則表達(dá)式判斷字符的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • C#實(shí)現(xiàn)XML序列化與反序列化

    C#實(shí)現(xiàn)XML序列化與反序列化

    這篇文章介紹了C#實(shí)現(xiàn)XML序列化與反序列化的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#中SequenceEqual的具體使用

    C#中SequenceEqual的具體使用

    SequenceEqual是LINQ擴(kuò)展方法之一,用于比較兩個(gè)序列(如數(shù)組、列表等)的元素是否相等,本文就來(lái)介紹一下SequenceEqual的具體使用,感興趣的可以了解一下
    2024-01-01
  • WPF中MVVM模式的理解與實(shí)現(xiàn)

    WPF中MVVM模式的理解與實(shí)現(xiàn)

    MVVM是一種設(shè)計(jì)模式,特別適用于WPF(Windows Presentation Foundation)等XAML-based的應(yīng)用程序開(kāi)發(fā),MVVM模式主要包含三個(gè)部分:Model(模型)、View(視圖)和ViewModel(視圖模型),本文給大家介紹了WPF中MVVM模式的理解與實(shí)現(xiàn),需要的朋友可以參考下
    2024-05-05
  • c# 實(shí)現(xiàn)文件上傳下載功能的實(shí)例代碼

    c# 實(shí)現(xiàn)文件上傳下載功能的實(shí)例代碼

    這篇文章主要介紹了如何用c# 實(shí)現(xiàn)文件上傳下載功能,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • c# 引用Nlog插件的步驟

    c# 引用Nlog插件的步驟

    這篇文章主要介紹了c# 引用Nlog插件的步驟,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 完美解決c# distinct不好用的問(wèn)題

    完美解決c# distinct不好用的問(wèn)題

    這篇文章主要介紹了完美解決c# distinct不好用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 深入c#工廠模式的詳解

    深入c#工廠模式的詳解

    本篇文章是對(duì)c#中的工廠模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

荆州市| 耒阳市| 余干县| 磴口县| 苗栗市| 濮阳市| 土默特左旗| 南皮县| 河北省| 庐江县| 连云港市| 高雄市| 定西市| 竹北市| 禄丰县| 深圳市| 色达县| 黎川县| 龙泉市| 长治县| 凯里市| 固阳县| 宁明县| 瓮安县| 六安市| 大宁县| 尉氏县| 南昌市| 沈丘县| 新和县| 镇平县| 旺苍县| 革吉县| 依兰县| 甘德县| 秦安县| 四子王旗| 安义县| 巩义市| 沁阳市| 盐池县|