欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
進(jìn)一步接觸C#委托與事件 - 51CTO.COM
    本文通過(guò)在控制臺下使用C#委托和事件和在窗體中使用C#委托和事件這兩部分內容進(jìn)一步地揭示了C#委托與事件的相關(guān)問(wèn)題,供大家參考。

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

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

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

    下面我們來(lái)看例子。

    首先,我們定義一個(gè)委托:

            
    1. public delegate void SaySomething(string name); 

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

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

            
    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 + "!");  

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

    接下來(lái),我們來(lái)看事件。

            
    1. public event SaySomething come; 

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

    我們來(lái)定義一個(gè)測試方法:

            
    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. }  

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

    再下面兩行就是將委托加到事件上,意思是說(shuō),如果你這個(gè)事件發(fā)生了,就告訴我一聲??梢酝ㄟ^(guò)“+=”來(lái)將n個(gè)委托實(shí)例加到某個(gè)事件上,一旦這個(gè)事件發(fā)生,所有的這些委托實(shí)例都會(huì )得到通知。

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

    最后運行一下

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

     

    我們回過(guò)頭來(lái)再看一下“事件”的定義:

            
    1. public event SaySomething come; 

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

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

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

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

     

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

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

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

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

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

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

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

     

    我們這里定義了一個(gè)ShowName委托和一個(gè)btnclick事件。并且,在button1_Click()方法中觸發(fā)這個(gè)btnclick事件。最后的結果是,當我們點(diǎn)擊按鈕的時(shí)候,首先彈出一個(gè)“我被點(diǎn)擊了?。?!”的對話(huà)框,然后確定之后再彈出另一個(gè)顯示按鈕名稱(chēng)的對話(huà)框:

     

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

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C#綜合揭秘——深入解析委托與事件
.NET中的委托:細節詳解-IT168 技術(shù)開(kāi)發(fā)專(zhuān)區
.NET基礎拾遺(4)委托、事件、反射與特性(上)
C#委托,事件
對于“委托”的解釋摘錄(五)
C#委托與事件學(xué)習筆記
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久