欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.委托delegate

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

舉例:

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

這臺(tái)電腦可以抽象成一個(gè)類(lèi)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("沙和尚", "在寫(xiě)程序!");
            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}在寫(xiě)代碼!", 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}在寫(xiě)代碼!", 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# 獲取字符串的字節(jié)數(shù)的方法

    c# 獲取字符串的字節(jié)數(shù)的方法

    本篇文章主要是對(duì)c#中獲取字符串的字節(jié)數(shù)的方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • 使用C#連接SQL?Server的詳細(xì)圖文教程

    使用C#連接SQL?Server的詳細(xì)圖文教程

    初學(xué)者學(xué)習(xí)上位機(jī)開(kāi)發(fā)遇到數(shù)據(jù)庫(kù)連接不上,是很常見(jiàn)的情況,可能會(huì)以各種形式呈現(xiàn)出來(lái),下面這篇文章主要給大家介紹了關(guān)于使用C#連接SQL?Server的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-02-02
  • C#串口通信實(shí)現(xiàn)方法

    C#串口通信實(shí)現(xiàn)方法

    這篇文章主要介紹了C#串口通信實(shí)現(xiàn)方法,詳細(xì)講述了C#串口通信所涉及的數(shù)據(jù)接收與發(fā)送方法,以及相關(guān)的線程調(diào)用方法,是非常典型的應(yīng)用,需要的朋友可以參考下
    2014-12-12
  • C#中DataTable實(shí)現(xiàn)篩選查詢(xún)的示例

    C#中DataTable實(shí)現(xiàn)篩選查詢(xún)的示例

    本文主要介紹了C#中DataTable實(shí)現(xiàn)篩選查詢(xún)的示例,主要是DataTable進(jìn)行過(guò)濾篩選,常用的一些方法為:Select,dataview,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-04-04
  • C#刪除字符串中重復(fù)字符的方法

    C#刪除字符串中重復(fù)字符的方法

    這篇文章主要介紹了C#刪除字符串中重復(fù)字符的方法,涉及C#針對(duì)字符串的遍歷及移除等操作的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 詳細(xì)分析c# 客戶端內(nèi)存優(yōu)化

    詳細(xì)分析c# 客戶端內(nèi)存優(yōu)化

    這篇文章主要介紹了c# 客戶端內(nèi)存優(yōu)化的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Linq兩個(gè)List集合取交集的實(shí)現(xiàn)

    Linq兩個(gè)List集合取交集的實(shí)現(xiàn)

    這篇文章主要介紹了Linq兩個(gè)List集合取交集的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    這篇文章介紹了WinForm使用DecExpress控件中的ChartControl插件繪制圖表的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#開(kāi)發(fā)Windows UWP系列之布局面板RelativePanel

    C#開(kāi)發(fā)Windows UWP系列之布局面板RelativePanel

    這篇文章介紹了C#開(kāi)發(fā)Windows UWP系列之布局面板RelativePanel,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C# 設(shè)計(jì)模式系列教程-狀態(tài)模式

    C# 設(shè)計(jì)模式系列教程-狀態(tài)模式

    狀態(tài)模式主要解決的是當(dāng)控制一個(gè)對(duì)象狀態(tài)轉(zhuǎn)換的條件表達(dá)式過(guò)于復(fù)雜時(shí)的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同的一系列類(lèi)當(dāng)中,可以把復(fù)雜的邏輯判斷簡(jiǎn)單化。
    2016-06-06

最新評(píng)論