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

.NET零基礎入門05:委托與事件,.net入門05委托

編輯:C#入門知識

.NET零基礎入門05:委托與事件,.net入門05委托


一:前言

本小節,我們需要停一停我們的小游戲開發,雖然它現在還不完美,還很簡單,甚至還有BUG。但是,為了更好的理解C#,現在到了該深入了解一些基礎知識的時候了。

當然,實際上,本小節內容對於零基礎入門的初學者來說,還是有點難了。委托與事件,如果只是泛泛的說一下,可能就是一兩句話。但是,我們的課程要遵循一個原則:知其然,知其所以然。所以,本小節的內容實際上有點多,但是我希望大家細細品味,爭取徹底消化委托和事件這兩個概念。

同時,本課程還要教會大家使用一個工具,分析代碼。

 

二:委托的現實場景:賣家委托快遞去送貨?

任何事情,首先都要問一個為什麼。這裡的問題是:為什麼賣家要委托快遞去送貨?

因為他干不了。他在北京賣一個壺到上海,他不應該、也沒能力自己跑到上海交給人家。所以他要“委托”給別人來做這件事情。

在代碼的世界中,也是這樣,我們的打老鼠游戲中,現在所有的邏輯代碼都在窗體的後台中,隨著我們學習面向對象,對代碼進行重構之後,業務邏輯代碼就會放到別的類中,這個“別的類”要負責“游戲開始”的邏輯,其中“游戲開始”的邏輯中有一個環節就是要在界面上顯示”游戲開始“。因為業務類不擁有窗體,所以它就不能顯示“游戲開始”,這個時候“委托”就派上用場了。也就是業務類不應該、也沒能力直接對窗體顯示“游戲開始”,於是,它“委托”窗體顯示“游戲開始”。

 

三:委托是什麼?

我們還是先回到賣家賣壺的例子來描述:“委托是什麼”。實際上,賣家委托快遞送貨,需要如下一些代碼:

“委托是什麼”這個問題是表象,實際上它還隱藏著5個小問題:

1:委托聲明是什麼?

2:委托變量是什麼?

3:什麼是委托變量賦值?

4:什麼是委托處理器?

5:如何調用委托?

在上圖代碼中,這5個小問題的序號正好對應了圖中的數字部分,

首先,程序得有一個地方聲明委托;

其次,賣家自己還得定義一個委托變量;

再次,通過某種形式給賣家的委托變量賦值,這個值是什麼呢,就是一個委托處理器的“引用”。委托處理器就是一個方法,所以,賦值的過程,就是將方法的引用賦值給委托變量。

最後,調用委托,實際上,就是使用委托變量。

備注,要注意的是,委托聲明和委托處理器的返回值和參數必須保持一致。

 

四:委托本質上是什麼?

上文我們闡述了委托是什麼,實際我們僅僅闡述的是委托的表象是什麼,那麼,委托本質上是什麼呢?

到現在為止,我們已經學過了兩個類型的概念:類和枚舉。我們在這裡要強調的是,上文代碼的委托聲明中的”SendProductHandler“實際上,是一個類,我們應該將其看為:

internal class SendProductHandler : System.MulticastDelegate
    {
        public SendProductHandler(object @object, IntPtr method)
        {
        }

        public virtual IAsyncResult BeginInvoke(string product, AsyncCallback callback, object @object)
        {
        }

        public virtual void EndInvoke(IAsyncResult result)
        {
        }

        public virtual void Invoke(string product)
        {
        }
    }

為什麼是這樣的呢,相信你看了下面的視頻就會明白。

 

五:視頻

非公開部分,請聯系最課程(www.zuikc.com)觀看。

 

六:事件是什麼?

知道了委托,我們來看事件,將小節”二:委托是什麼“中的代碼2和3處,修改為:

“委托”就變成“事件”了。

使用事件後,你可以為你的委托變量_sendProduct,增加多個方法,你看,代碼中的位置3處,不再是個“=”號,而是一個“+=”號了。

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