委託與事件及其應用

一.委託以及延伸

先看下MSDN 的介紹吧~------ delegate

通俗的說 委託就是可以實現 把方法做爲變量來傳遞

1.先寫個最簡單的委託的用法

靜態的和非靜態方法的

結果會輸出

您好 wlf

 Hello wlf

這是最原始的委託

2. 進化爲匿名方法

聲明完委託後  還要聲明方法 是不是很麻煩  如果不聲明方法  用匿名方法 可以幫我們 看 代碼減少了很多吧~

3.再進化爲拉姆達表達式

上面的雖然簡單了不少 但是 還能更簡單的  用拉姆達表達式~

看 這就是拉姆達表達式的演變 一定要會這個~  因爲在EF LINQ 等 有很多用拉姆達表達式的~

4.用Action 和Func繼續簡化

上面的代碼以及很簡單了 但是還有個很不爽的一點~  要聲明委託! 可以不聲明麼?當然可以~

先看 MSDN介紹  ActionFunc

通俗的講 這兩個都是用來幫你聲明委託 

Action 用於幫你聲明沒用返回值的委託    Func則是有返回值的  最後一個參數爲返回值

看~ 以前的版本 總是要聲明一個HelloWorld 的委託  現在只有兩行代碼就可以了  下面順便掩飾了有返回值的 func 的例子。第一個參數 是傳遞

參數的類型 第二個是返回值的類型  ~ 這裏說下 這倆函數都有16個重載~  所以多個參數是沒問題的~

5.說說委託的好處

委託的好處 應用 文章開始已經說了很多了 這裏就拿文章開頭的例子 體會下委託的好處 

當我們再多一種語言來問好時  只需增加一種Action 即可  而不需要改動 sayHello 方法 否則 這裏將充滿了 if else 的判斷 

  6.工作裏的應用

 再 LINQ 或EF 裏 都有 個很重要的  數據刷選的功能  WHERE 它的參數就是 Func  直接上代碼  自己看註釋~

看 可以很輕鬆的實現 數據過濾~  喜歡這種函數式風格的編程方式 我們可以點  順便介紹工作中的 Action 

嗯 有圖有真相~  這個ForEach 的參數 正是Action 以後遇到這幾個 新手們就不用再陌生了~

 實現把集合裏 大於4的打印出來的 這個功能  全部都是點兒出來的~ 

提示:儘量不要再ForEach 裏進行集合的操作 比如 移除集合裏的元素等~ 否則會出來不希望出現的結果~ 出來的結果爲 2 4 6

原因 反編譯 我們發現是 for  按索引刪除

上面的話題扯遠了~ 迴歸主題

二 .事件以及應用

1.先用委託來實現一個常見的工作場景(委託代替事件)

 webForm  用戶控件 我們在實際工作中 用的都是非常多的  說一個場景  一個用戶控件 裏面一個textbox  一個button  一個頁面引用了

這個用戶控件 這個頁面裏有一個label 我希望 點擊 用戶控件裏的 button改變  把 textbox 裏的值 綁定到 label 上  這就是一個典型的委託事件的

應用

 1.直接上代碼  先上用戶控件的

聲明一個委託   當點擊按鈕時  調用

2.  引用用戶控件的頁的代碼

當然 我們會了拉姆達表達式  完全可以寫成

這裏主要說的是 委託的註冊 記得要寫到  !IsPostBack 外面   

大概順序是這樣的  先執行 用戶控件的外部變量賦值 =>  再執行父頁面的用外部變量賦值(本例子中沒有)=> 再執行父頁面的pageload=>用戶控件的pageload 

如果不寫到 !IsPostBack 外面    點擊按鈕後  先執行 用戶控件的外部變量賦值(以前被賦值的委託會又爲空,所以這時需要在頁面pageload 裏 重新註冊 而不能寫到!IsPostBack) 裏面~

3 只用委託的缺點

功能雖然實現了  但是我們想  我們可以在 父頁面  給  Puchange.onChangevent 賦值爲null 或者篡改爲別的  而我希望我們在引用時 只能添加 或移除 這樣就更

完美了 所以 事件就出來了~

2.使用事件重新實現上面的代碼

1.用戶控件裏的

2.父頁面

3.winform 或Silverlight 裏儘量使用委託和事件 來通訊

這樣可以更好的降低耦合  避免了 子窗體中出現父窗體對象  降低耦合 

 

三.委託的其他資料

委託的逆變與協變

何時使用委託何時使用接口

正則表達式委託

異步委託編程

基於事件的異步模式概述

四.總結

文章比較入門 希望新手能對委託事件有更好的瞭解 平且能把委託擴展來的東西 熟練運用到工作中 來簡化代碼~ 並且能把事件熟練運用~文章的目的也達到了

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章