日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

委托与事件以及应用

發布時間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 委托与事件以及应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為最近再帶兩個實習的朋友~ 他們在理解委托這塊 不明白能用來做什么 對這塊理解的不好 更不用說委托擴展來的 拉姆達表達式 事件等了~? 但是這些很重要 在MVC? EF4.1 里 都會有很多拉姆達表達式的影子 在做組件開發 用戶控件開發? 事件的運用 一定也是少不了的?? 稍微深入點兒的說? 用于兩個對象之間的通訊 用來解耦 用委托事件 是很不錯的選擇 而設計模式里的觀察者模式 也是基于委托事件的應用? 還有做winform 開發的 里的線程 WPF SL 的異步調用等? 都是有這委托的影子的? 所以 這個還是很重要的。也是一定要掌握的~ 希望通過這篇文章 能讓大家更加了解委托以及如何運用~

一.委托以及延伸

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

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

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

靜態的和非靜態方法的

結果會輸出

您好 wlf

?Hello wlf

這是最原始的委托

2. 進化為匿名方法

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

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

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

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

4.用Action 和Func繼續簡化

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

先看 MSDN介紹??Action?和?Func

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

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 里盡量使用委托和事件 來通訊

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

?

三.委托的其他資料

委托的逆變與協變

何時使用委托何時使用接口

正則表達式委托

異步委托編程

基于事件的異步模式概述

四.總結

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


from:http://www.cnblogs.com/wlflovenet/archive/2011/11/02/2230775.html?

轉載于:https://www.cnblogs.com/flysnow-z/archive/2011/11/03/2234268.html

總結

以上是生活随笔為你收集整理的委托与事件以及应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。