回覆列表
  • 1 # 使用者3670237806543

    委託 delegate

    用來定義一種特殊的型別,

    delegate int MyDelegate(int)

    注意:這裡的MyDelegate是型別,和用class定義一個類MyClass一樣。為何特殊,因為它只可以儲存對函式(一個int型別的形參和一個int型別的返回值的函式)的引用,這個函式可以是靜態函式也可以是例項函式,甚至一個lambada表示式……。

    例項化一個委託物件:

    MyDelegate m_funcTest = null;

    賦值:

    m_funcTest = System.Math.Abs;

    為了方便,我們這裡用庫函數里的求絕對值函式

    使用:

    int x = m_funcTest(-1);

    所以通俗的講,委託提供對函式的引用,用法類似C裡面的函式指標。

    對了,我忘了要通俗的理解:

    假設委託是電腦的介面統稱,那麼你可以定義很多型別的介面;如usb com vga ps2;然,你電腦上的顯示器vga介面則是一個vga型別的委託的例項;這個例項屬於你的電腦,你把你的顯示器插到這個介面上,就是為這個例項賦值;你的電腦輸出影片畫面的時候,你的顯示器則顯示了相應的畫面,這個過程就是對委託物件的呼叫。當然,鄰座小王也可以把自己顯示器插到你的電腦介面上,這樣他就能看到你的電腦畫面 ,你是不是會懵逼,因為你只有一個顯示器介面,當然前提是,小王有這個權利(訪問許可權)。

    假設你們公司有一臺一直在播放電影 的公共電腦(全域性靜態委託物件),但是沒有顯示器,每個員工都可以把自己的顯示器接到上面來看電影,只要介面一樣(如上文的MyDelegate)

    事件 event

    舉個例子:

    我有一個特別的電燈開關,但是我沒有裝電燈,但是我裝了一堆接線插座,注意是一堆,某天a把自己的燈泡接到插座上,我控制我的開關就能控制a的燈泡,但是我不知道a是誰,當然b,c,d……都可以把他們的燈泡接上來,只要介面一樣都可以。

    所以事件就可以看做這一堆特定型別的插座,訂閱事件就是把值得燈泡插上去,所以當你去世時,一定要取消,否則你無法入土為安( ),所以取消訂閱就是把插頭拔下來。

    所以,我們發現一個共同點,電腦不關心顯示器是誰,開關不關心燈泡是誰。所以常常用來解決依賴關係,通知等問題。

    再說.net

  • 中秋節和大豐收的關聯?
  • 鎖骨骨折內固定多久能回覆正常?能幹重活嗎?