乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      進一步接觸C#委托與事件 - 51CTO.COM

       suweixin 2011-01-15
        本文通過在控制臺下使用C#委托和事件和在窗體中使用C#委托和事件這兩部分內(nèi)容進一步地揭示了C#委托與事件的相關(guān)問題,供大家參考。

        一、在控制臺下使用C#委托和事件

        我們都知道,C#中有“接口”這個概念,所謂的“接口”就是定義一套標(biāo)準,然后由實現(xiàn)類來具體實現(xiàn)其中的方法,所以說“接口,是一組類的抽象”。同樣道理,我們可以將“委托”理解為“方法的抽象”,也就是說定義一個方法的模板,至于這個方法具體是怎么樣的,就由方法自己去實現(xiàn)。

        我們知道接口的最大好處就是可以實現(xiàn)多態(tài),同理,“委托”是可以實現(xiàn)方法的多態(tài),當(dāng)我們想調(diào)用某個具體方法的時候,我們不直接調(diào)用這個方法,而是去調(diào)用這個委托。當(dāng)然,我們必須在具體方法和委托之間建立某種關(guān)聯(lián)。

        下面我們來看例子。

        首先,我們定義一個委托:

                
        1. public delegate void SaySomething(string name); 

        這跟抽象方法的語法格式很相似,只是多了一個關(guān)鍵字delegate。既然是對方法的一種抽象,那么我們最關(guān)注的當(dāng)然就是方法的返回值以及方法的參數(shù)了。所以上面紅色的部分就是我們定義出來的一個規(guī)矩,如果某個方法想委托我去做事,那么請你遵循我的規(guī)矩,就是返回值為void,參數(shù)為一個字符串。我們這個委托的含義是,當(dāng)某個人來了,就向他說點東西。

        好,既然我們已經(jīng)定義了這個規(guī)矩,下面我們就定義具體的方法了。

                
        1. public void SayHello(string name)  
        2. {  
        3.     Console.WriteLine("Hello," + name + "!");  
        4. }  
        5.  
        6.  
        7. public void SayNiceToMeetYou(string name)  
        8. {  
        9.     Console.WriteLine("Nice to meet you," + name + "!");  

        我們這里一共定義了兩個方法,一個是向某人說Hello,另一個是向某人說Nice to meet you。我們看到,這里定義的兩個方法的返回值和參數(shù)跟我們前面定義的“委托”是一致的。

        接下來,我們來看事件。

                
        1. public event SaySomething come; 

        我們定義了一個事件,這個事件是“有人來了”,注意定義的時候我們使用event關(guān)鍵字,除此之外,我們還加上了前面定義的“委托”的名字。這個意思是說,我這個事件只會跟“SaySomething”打交道,并且,當(dāng)我這個事件發(fā)生的時候,我會通知關(guān)注我的這些“委托”(再由這些“委托”去調(diào)用具體的方法)。

        我們來定義一個測試方法:

                
        1. public void test() {   
        2.     SaySomething sayhello = new SaySomething(SayHello);  
        3.     SaySomething saynice = new SaySomething(SayNiceToMeetYou);  
        4.     come += sayhello;  
        5.     come += saynice;  
        6.     come("張三");  
        7. }  

        方法體中的前面兩行是用來實例化委托,注意我們用到了new關(guān)鍵字,就好像實例化一個類一樣,然后傳入一個參數(shù),但這個參數(shù)不是string類型、也不是int類型,而是一個方法名。

        再下面兩行就是將委托加到事件上,意思是說,如果你這個事件發(fā)生了,就告訴我一聲。可以通過“+=”來將n個委托實例加到某個事件上,一旦這個事件發(fā)生,所有的這些委托實例都會得到通知。

        最后一行是觸發(fā)一個事件,注意我們是直接用一個事件名,然后跟一個參數(shù),這又跟“委托”中定義的那個規(guī)矩一致(即,要有一個string類型的參數(shù))。

        最后運行一下

                
        1. static void Main(string[] args)  
        2. {  
        3.     Program program = new Program();  
        4.     program.test();  
        5.     Console.Read();  
        6. }  

        C#委托與事件 

        我們回過頭來再看一下“事件”的定義:

                
        1. public event SaySomething come; 

        這里已經(jīng)指出了“委托”的名字,所以,我們可以直接將方法加到事件上,而省略“委托”的實例化過程,因此上面的test()方法可以簡單寫為:

                
        1. public void test() {   
        2.     come += SayHello;  
        3.     come += SayNiceToMeetYou;  
        4.     come("張三");  
        5. }  

        二、在窗體中使用C#委托和事件

        上面的例子并不能體現(xiàn)委托和事件的優(yōu)點,其實,委托和事件在C#中使用非常廣泛,例如,當(dāng)我們點擊某個“按鈕”的時候,就會有一個“Click”事件觸發(fā),而這個事件會通知“委托”,在C#窗體應(yīng)用程序中,“委托”的名字比較規(guī)范,統(tǒng)一使用“EventHandler”,它的具體格式是“void EventHandler(object sender, EventArgs e);”。相信大家都寫過下面這樣子的HelloWorld程序:

        HelloWorld程序 

        當(dāng)點擊按鈕的時候彈出一個對話框。我們怎樣實現(xiàn)的呢?你肯定會說,我們在設(shè)計窗口雙擊按鈕,就會自動為我們生成類似如下的方法:

                
        1. private void button1_Click(object sender, EventArgs e)  
        2. {  
        3.     MessageBox.Show("我被點擊了?。?!");  

        其實,這里用到的就是事件和委托,這里的button1_Click就是符合EventHandler委托規(guī)矩的一個具體的方法,即返回值為void,參數(shù)分別是一個object和EventArgs。

        我們可以在Form1.Designer.cs中看到如下代碼:

                
        1. this.button1.Click += new System.EventHandler(this.button1_Click); 

        可以看到,這里有一個Click事件,然后將一個委托實例附加到這個事件上,跟我們前面講的控制臺應(yīng)用程序中的用法是完全一樣的。那這個Click事件是怎么觸發(fā)的呢?對于這些系統(tǒng)類的事件,并不用我們管。

        當(dāng)然,我們也可以定義自己的事件和委托,例如我定義一個事件,這個事件就是輸出對象的名字。

        這個事件就是輸出對象的名字 

        我們這里定義了一個ShowName委托和一個btnclick事件。并且,在button1_Click()方法中觸發(fā)這個btnclick事件。最后的結(jié)果是,當(dāng)我們點擊按鈕的時候,首先彈出一個“我被點擊了?。。?#8221;的對話框,然后確定之后再彈出另一個顯示按鈕名稱的對話框:

        另一個顯示按鈕名稱的對話框 

        C#委托與事件的相關(guān)內(nèi)容介紹到這里,希望對大家會有幫助。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多