精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#委托基礎:談委托和接口

開發(fā) 后端
C#委托是.NET Framework中一個非常炫的特性,我們幾乎每天都會接觸委托,使用委托。本文介紹了有關C#委托的一些基礎。

本文是博客園中近日關于C#委托的討論所衍生出來的一個系列中的***篇,文章作者麒麟.NET對C#委托的內(nèi)涵和外延進行了討論。用麒麟.NET的話來說:“委托是.NET Framework中一個非常炫的特性,絕不會向有些評論里說的那樣,根本沒有機會接觸。恰恰相反,我們幾乎每天都會接觸委托,使用委托。”

那么,先從示例開始,了解什么是C#委托吧。

從示例開始

假設一個系統(tǒng)的用戶登錄模塊有如下所示的代碼

  1. class User  
  2. {  
  3.     public string Name { getset; }  
  4.  
  5.     public string Password { getset; }  
  6. }  
  7.  
  8. class UserService  
  9. {  
  10.     public void Register(User user)  
  11.     {   
  12.         if (user.Name == "Kirin")  
  13.         {  
  14.             Log("注冊失敗,已經(jīng)包含名為" + user.Name + "的用戶");  
  15.         }  
  16.         else 
  17.         {  
  18.             Log("注冊成功!");  
  19.         }  
  20.     }  
  21.  
  22.     privte void Log(string message)  
  23.     {  
  24.         Console.WriteLine(message);  
  25.     }  
  26. }  

UserService類封裝用戶登錄的邏輯,并根據(jù)不同的登錄情況向控制臺打印不同的日志內(nèi)容。當程序關閉時,所記錄的日志自然也隨之消失。

客戶端的代碼為

  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         User user = new User { Name = "Kirin", Password = "123" };  
  6.         UserService service = new UserService();  
  7.         service.Register(user);  
  8.         Console.ReadLine();  
  9.     }  

使用策略模式

然而這樣的設計肯定是無法滿足用戶的需求的,用戶肯定希望能夠查看以前的日志記錄,而不僅僅是程序打開以后的內(nèi)容。如果我們僅僅修改Log方法的實現(xiàn),那么用戶需求再次改變時我們該如何處理呢?難道要無休止地修改Log方法嗎?

既然日志記錄的方式是變化的根源,我們自然會想到將其進行封裝。我們創(chuàng)建一個名為ILog的接口。

  1. interface ILog  
  2. {  
  3.     void Log(string message);  
  4. }  

并創(chuàng)建兩個實現(xiàn)了ILog的類,ConsoleLog和TextLog,分別用來向控制臺和文本文件輸出日志內(nèi)容。

  1. class ConsoleLog : ILog  
  2. {  
  3.     public void Log(string message)  
  4.     {  
  5.         Console.WriteLine(message);  
  6.     }  
  7. }  
  8.    
  9. class TextLog : ILog  
  10. {  
  11.     public void Log(string message)  
  12.     {  
  13.         using (StreamWriter sw = File.AppendText("log.txt"))  
  14.         {  
  15.             sw.WriteLine(message);  
  16.             sw.Flush();  
  17.             sw.Close();  
  18.         }  
  19.     }  
  20. }  

在UserService類中添加一個ILog類型的屬性LogStrategy。

  1. class UserService  
  2. {  
  3.     public ILog LogStrategy { getset; }  
  4.  
  5.     public UserService()  
  6.     {  
  7.         LogStrategy = new ConsoleLog();  
  8.     }  
  9.  
  10.     public void Register(User user)  
  11.     {   
  12.         if (user.Name == "Kirin")  
  13.         {  
  14.             LogStrategy.Log("注冊失敗,已經(jīng)包含名為" + user.Name + "的用戶");  
  15.         }  
  16.         else 
  17.         {  
  18.             LogStrategy.Log("注冊成功!");  
  19.         }  
  20.     }  
  21. }  
  22.  

客戶端代碼變?yōu)槿缦滦问健?/P>

  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         User user = new User { Name = "Kirin", Password = "123" };  
  6.         UserService service = new UserService { LogStrategy = new TextLog() };  
  7.         service.Register(user);  
  8.         Console.ReadLine();  
  9.     }  

在聲明UserService的時候,還可以將將LogStrategy設置為TextLog。這樣在UserService進行邏輯處理時,使用的LogStrategy即為TextLog,日志將輸出到文本文件中。

我們在干什么?我們在重構。重構的結果是什么?重構的結果是實現(xiàn)了一個簡單的策略模式。

使用委托

然而策略模式仍然不能滿足客戶的需求,這是為什么呢?

1. 用戶也許會希望自定義Log的實現(xiàn)。當然,你可以通過在客戶代碼處擴展ILog來實現(xiàn)自己的日志記錄方式。如

  1. class TextBoxLog : ILog  
  2. {  
  3.     private TextBox textBox;  
  4.  
  5.     public TextBoxLog(TextBox textBox)  
  6.     {  
  7.         this.textBox = textBox;  
  8.         this.textBox.Multiline = true;  
  9.     }  
  10.  
  11.     public void Log(string message)  
  12.     {  
  13.         textBox.AppendText(message);  
  14.         textBox.AppendText(Environment.NewLine);  
  15.     }  
  16. }  
  17.  

但這種方案是否過于復雜呢?如果用戶希望在ListView或其他控件上顯示,是否需要逐個創(chuàng)建新類呢?并且這樣的實現(xiàn)是否與客戶端的耦合過于緊密呢?比如用戶希望在ListView的各個列中顯示日志內(nèi)容、時間、來源等不同內(nèi)容,那么在ListViewLog中對ListView硬編碼是否很難重用呢?

2. 用戶也許會希望同時使用多種日志記錄方式。比如,同時向控制臺、文本文件、客戶端控件和事件查看器中輸出日志。你當然可以在UserService中維護一個List<ILog>,但這時UserService的職責過多,顯然違反了SRP。

下面介紹本文的主角:委托。

我們首先來創(chuàng)建一個名為Log的委托,它接收一個string類型的參數(shù)。

  1. public delegate void Log(string message); 

然后在UserService類中添加一個Log委托類型的屬性LogDelegate。

  1. class UserService  
  2. {  
  3.     public Log LogDelegate { getset; }  
  4.  
  5.  
  6.     // …  
  7. }  

在客戶端,我們直接聲明兩個靜態(tài)方法,它們都包含一個string類型的參數(shù),并且沒有返回值。

  1. static void LogToConsole(string message)  
  2. {  
  3.     Console.WriteLine(message);  
  4. }  
  5.  
  6. static void LogToTextFile(string message)  
  7. {   
  8.     using (StreamWriter sw = File.AppendText("log.txt"))  
  9.     {  
  10.         sw.WriteLine(message);  
  11.         sw.Flush();  
  12.         sw.Close();  
  13.     }  
  14. }  

客戶端聲明UserService的代碼變?yōu)?/P>

  1. static void Main(string[] args)  
  2. {  
  3.     User user = new User { Name = "Kirin", Password = "123" };  
  4.     UserService service = new UserService();  
  5.     service.LogDelegate = LogToConsole;  
  6.     service.LogDelegate += LogToTextFile;  
  7.     service.Register(user);  
  8.      
  9.     Console.ReadLine();  

在構造委托時,我們還可以使用匿名方法和Lambda表達式,在老趙的文章中詳細闡述了這些寫法的演變。

對于何時使用委托,何時使用接口(即策略模式),MSDN中有明確的描述:

在以下情況下,請使用委托:

◆當使用事件設計模式時。

◆當封裝靜態(tài)方法可取時。

◆當調(diào)用方不需要訪問實現(xiàn)該方法的對象中的其他屬性、方法或接口時。

◆需要方便的組合。

◆當類可能需要該方法的多個實現(xiàn)時。

在以下情況下,請使用接口:

◆當存在一組可能被調(diào)用的相關方法時。

◆當類只需要方法的單個實現(xiàn)時。

◆當使用接口的類想要將該接口強制轉換為其他接口或類類型時。

◆當正在實現(xiàn)的方法鏈接到類的類型或標識時:例如比較方法。

您可能覺得上面的例子闡述委托和接口有些過于牽強,事實上有些時候的確很難選擇使用接口還是委托。Java中沒有委托,但所有委托適用的情況同樣可以使用包含單一方法的接口來實現(xiàn)的。在某種程度上,可以說委托是接口(僅定義了單一方法)的一種輕量級實現(xiàn),它更靈活,也更方便。

以上就是對于C#委托中一些基本概念的介紹。

【編輯推薦】

  1. C#委托實例簡單分析
  2. 一個.NET委托的故事:彼得,老板和宇宙
  3. 解惑答疑:C#委托和事件
  4. 各版本.NET委托的寫法回顧
  5. 換一個角度看.NET中的理解委托和事件
責任編輯:yangsai 來源: 博客園
相關推薦

2011-04-22 09:14:26

C#委托

2010-12-22 10:21:17

C#基礎

2009-08-18 10:35:26

C#委托

2009-08-27 16:53:01

C#委托C#事件

2009-08-20 18:37:52

委托C#異步委托

2009-08-20 18:11:08

C#異步委托

2009-10-09 09:07:40

C#委托和事件

2024-05-30 12:24:03

C#開發(fā)

2009-08-18 10:54:17

C#事件和委托

2024-10-05 00:00:35

Action?C#Func?

2009-08-26 14:27:54

C#委托和事件

2024-12-23 08:00:00

委托C#編程

2009-09-01 18:36:35

C#委托實例

2024-09-29 09:28:38

Action?C#

2024-05-16 13:36:04

C#委托事件

2011-05-20 17:50:45

C#

2010-09-14 14:05:42

C#委托

2011-06-16 14:38:18

JavaScript事件委托

2024-05-15 09:11:51

委托事件C#

2009-08-03 13:23:04

C#編程組件-事件-委托
點贊
收藏

51CTO技術棧公眾號

蜜桃麻豆影像在线观看| 夜夜躁很很躁日日躁麻豆| 视频一区日韩| 午夜日韩在线电影| 欧美黑人3p| 中文字幕日产av| 中文字幕亚洲综合久久五月天色无吗''| 91精品婷婷国产综合久久性色| 红桃一区二区三区| 色婷婷视频在线| 日韩av中文字幕一区二区三区 | 国产成人精品久久| 久久国产高清视频| 秋霞在线一区| 88在线观看91蜜桃国自产| 草b视频在线观看| 四虎久久免费| 国产成人av资源| 国产精品jizz在线观看麻豆| 欧美日韩精品亚洲精品| 欧洲激情综合| 亚洲成在人线av| wwww.国产| 激情黄产视频在线免费观看| 国产精品高潮呻吟久久| 精品国产一区二区三区四区vr| 国产亚洲久一区二区| 精品999日本| 精品国偷自产在线视频99| 一级做a爰片毛片| 激情综合婷婷| 欧美日韩一区在线| 成人一级片网站| wwwww亚洲| 亚洲丝袜另类动漫二区| 日韩欧美亚洲日产国产| 亚洲精品一区二区口爆| 精品一区二区三区av| 日本成熟性欧美| www.youjizz.com亚洲| 色综合蜜月久久综合网| 亚洲女同精品视频| 在线黄色免费网站| 91精品短视频| 日韩视频永久免费| 99国产精品久久久久久| 免费高清视频在线一区| 色综合久久综合网欧美综合网| 成人免费观看在线| 色呦呦在线资源| **性色生活片久久毛片| 亚洲aⅴ天堂av在线电影软件| 天天在线女人的天堂视频| 成人污污视频在线观看| 亚洲free嫩bbb| av中文字幕第一页| 国产一区二三区| 亚洲999一在线观看www| 国产精品亚洲lv粉色| 久久99精品久久久久久久久久久久| 热re91久久精品国99热蜜臀| 99久热在线精品996热是什么| 精久久久久久| 91po在线观看91精品国产性色| 天堂资源在线播放| 一区在线视频观看| 97色在线视频观看| www..com国产| 亚洲综合国产| 国产精品久久久久久久av电影| 日本视频免费观看| 麻豆精品国产传媒mv男同| 国产欧美在线看| 99视频在线观看免费| 国产精品一品二品| 久久国产精品精品国产色婷婷 | 中文字幕亚洲综合久久| 亚洲综合久久av一区二区三区| 久久精品久久久| 欧美激情一二区| 久久一区二区三区视频| 日本中文字幕一区二区有限公司| 国产日韩欧美日韩| www.xxxx国产| 91视视频在线观看入口直接观看www| 精品一区日韩成人| 成年人视频网站在线| 国产精品传媒入口麻豆| 97在线免费视频观看| 国产在线88av| 欧美日韩视频在线观看一区二区三区 | 成人av蜜桃| 人妻与黑人一区二区三区| 91日韩一区二区三区| 欧美一区二区高清在线观看| 四虎影视在线播放| 亚洲天堂中文字幕| 男女日批视频在线观看| 亚洲色图官网| 欧美婷婷六月丁香综合色| 亚洲精品午夜在线观看| 久久久久久亚洲精品美女| 欧美白人最猛性xxxxx69交| 美女日批在线观看| 亚洲人成网站77777在线观看| 中文字幕日韩精品有码视频| 糖心vlog免费在线观看| 亚洲伦伦在线| 国产精品麻豆va在线播放| 国产一区二区在线播放视频| 成人午夜激情在线| 久久一区免费| a视频在线免费看| 天天综合日日夜夜精品| 成人性生生活性生交12| 深夜激情久久| 亚洲欧美日韩爽爽影院| 成人在线观看高清| 免费亚洲婷婷| 成人91免费视频| bbbbbbbbbbb在线视频| 一区二区三区四区蜜桃| 18岁视频在线观看| 日韩一区免费| 国产亚洲欧美日韩一区二区| 强乱中文字幕av一区乱码| 亚洲一区不卡| 国产美女久久久| 黄色一级a毛片| 亚洲国产精品黑人久久久| 精品一二三四五区| 国产91在线播放精品| 精品国产在天天线2019| 人妻无码一区二区三区免费| 国产精品一卡| 国产98色在线| 色播色播色播色播色播在线| 亚洲人成小说网站色在线| 欧美一区二区三区爽大粗免费| 国产伊人久久| 亚洲欧美变态国产另类| 久久r这里只有精品| 日本va欧美va精品| 欧美日韩在线播放一区二区| av福利导福航大全在线| 91精品国产色综合久久久蜜香臀| 扒开jk护士狂揉免费| 国产精品黄色| 3d动漫啪啪精品一区二区免费| 不卡在线视频| 色猫猫国产区一区二在线视频| 精品无码在线视频| 99xxxx成人网| 国产精品我不卡| 主播国产精品| 制服丝袜亚洲网站| 日本伦理一区二区三区| 亚洲一区日韩在线| 久久久久久久有限公司| 女人让男人操自己视频在线观看| 91精品国产一区二区| 一级免费黄色录像| 久久99九九99精品| 亚洲国产精品久久久久久女王| 日本不良网站在线观看| 精品国产乱码久久久久久牛牛| 国产免费无码一区二区视频| 国产一区二区视频在线| 国产经典久久久| vam成人资源在线观看| 日韩在线免费视频| 国产精品久久久午夜夜伦鲁鲁| 国产精品久久午夜夜伦鲁鲁| 国产欧美精品一二三| 一区二区三区在线| 亚洲综合中文字幕68页| 岛国成人毛片| 日韩欧美一级二级三级| 久久99久久久| 9色porny自拍视频一区二区| 亚洲色成人一区二区三区小说| 亚洲另类av| 日韩av男人的天堂| 风间由美一区| 7777精品伊人久久久大香线蕉的| 国产成人自拍网站| 国产精品一区二区在线看| 日韩网站在线免费观看| 妖精一区二区三区精品视频| 日本成人免费在线| 日本在线免费网| 欧美一区二区视频网站| 欧美成人精品欧美一| 成人一级黄色片| 欧美 丝袜 自拍 制服 另类| 欧美人与牛zoz0性行为| 国产欧美亚洲精品| 超鹏97在线| 亚洲精品xxxx| 亚洲精品国产欧美在线观看| 国产精品视频在线看| 特黄特色免费视频| 性xx色xx综合久久久xx| 午夜精品美女久久久久av福利| 香蕉久久久久久| 欧美激情喷水视频| 黄色av免费在线观看| 欧美日韩精品一区二区| 国产成人无码精品久在线观看| 久久久精品中文字幕麻豆发布| 成人免费毛片播放| 女主播福利一区| 久久天天狠狠| 99re8精品视频在线观看| 久久久亚洲影院| 风间由美一区| 亚洲精品第一国产综合精品| 影音先锋国产在线| 亚洲国产一区二区三区青草影视| 精品无码人妻一区| 国产一区不卡视频| 免费看黄在线看| 欧美成熟视频| 欧美精品久久| 亚洲一区网址| 国产日韩中文字幕在线| 最近高清中文在线字幕在线观看1| 日韩精品在线免费观看| 国产婷婷在线视频| 91国偷自产一区二区开放时间| 欧美日韩免费做爰视频| 国产亚洲精品福利| 亚洲国产日韩在线一区| 久久国产精品99精品国产| 欧美日韩在线一| 欧美日韩国产亚洲一区| 日本一区二区三区视频免费看| 亚洲3区在线| 91精品久久久久久综合乱菊| 久久青草视频| 日韩av电影手机在线观看| 在线中文字幕第一页| 亚洲视频在线观看视频| 日本人妻熟妇久久久久久| 91麻豆精品国产自产在线 | 自拍视频在线| 亚洲日韩欧美视频一区| 黄色av小说在线观看| 欧美一级在线观看| 国产老妇伦国产熟女老妇视频| 色综合久久66| 日韩欧美成人一区二区三区| 亚洲一区二区视频在线观看| 欧美h片在线观看| 亚洲日本在线天堂| 三年中国中文观看免费播放| 97久久超碰国产精品| 中国特级黄色片| 国产高清不卡一区二区| 欧美激情国内自拍| 国产91露脸合集magnet| 久久精品一二三四| 国内精品伊人久久久久av一坑| 在线观看国产中文字幕| 日韩av电影天堂| 黄色av网址在线播放| 久久久久综合| 国产精品入口免费软件| 免费成人在线网站| www.久久91| 国产在线精品一区二区夜色| 不许穿内裤随时挨c调教h苏绵 | 久久人妻少妇嫩草av无码专区| 丁香亚洲综合激情啪啪综合| 伊人影院在线观看视频| 国产伦精品一区二区三区免费迷 | 国精品无码一区二区三区| 亚洲男人的天堂一区二区| 97在线观看视频免费| 一个色综合网站| 动漫精品一区一码二码三码四码| 亚洲一区二区三区美女| 久久久久久久极品| 色94色欧美sute亚洲13| 奴色虐av一区二区三区| 欧美另类一区二区三区| а√中文在线资源库| 亚洲国产日韩欧美在线99| 日本v片在线免费观看| 亚洲免费一在线| 高清免费电影在线观看| 久久青草福利网站| 成人影院网站| 国产美女久久精品| 日韩成人视屏| 视频二区一区| 欧美国产三级| 男人天堂网视频| 美国三级日本三级久久99| 色偷偷中文字幕| 久久久91精品国产一区二区精品| 婷婷丁香综合网| 亚洲综合免费观看高清完整版| 欧美成人精品欧美一级乱黄| 91官网在线免费观看| 一级成人免费视频| 日韩精品一二三四区| 免费网站看v片在线a| 性色av一区二区三区| se69色成人网wwwsex| 91精品久久久久久久久久久久久| 青草久久视频| 在线成人性视频| 亚洲一区二区三区四区五区午夜 | 嗯啊主人调教在线播放视频| 国产精品第10页| 亚洲天堂av资源在线观看| 五月天亚洲综合情| av成人天堂| 亚洲综合在线一区二区| 久久综合给合久久狠狠狠97色69| av最新在线观看| 色中色一区二区| 性生活黄色大片| 中文字幕免费精品一区高清| 91制片在线观看| 91免费精品国偷自产在线| 清纯唯美综合亚洲| 国产二区视频在线播放| 国模一区二区三区白浆| 国产精品扒开腿做爽爽| 专区另类欧美日韩| 国产一区二区三区视频免费观看 | 亚洲乱亚洲乱妇| 2019中文字幕在线观看| 日韩三级久久| 免费看日b视频| 久久se精品一区精品二区| 亚洲国产欧美视频| 亚洲影院在线观看| 探花国产精品一区二区| 亚洲欧美成人在线| 丰乳肥臀在线| 99re视频| 91精品一区二区三区综合| 国产欧美激情视频| 国产精品麻豆欧美日韩ww| 久久精品久久久久久久| 国产视频亚洲视频| 超碰超碰在线| 91免费欧美精品| 久久一本综合| 91激情视频在线| 国产精品国产自产拍高清av | 亚洲av无码一区二区三区观看| 一区二区三区在线高清| 国产又粗又猛又爽又黄视频| 亚洲欧美精品一区| 免费观看成人性生生活片| 日韩精品欧美专区| 天堂蜜桃91精品| 无码人妻精品一区二区中文| 色哟哟亚洲精品| 国内在线精品| 国产精品视频自在线| 成人羞羞在线观看网站| 亚洲最大综合网| 久久久99免费| 国产男女裸体做爰爽爽| 理论片在线不卡免费观看| 96视频在线观看欧美| 好色先生视频污| 久久97超碰色| 久久精品这里有| 亚洲国产小视频在线观看| 国产va在线视频| 欧美日韩在线观看一区| 久久国产麻豆精品| 欧美日韩黄色网| 欧美videos大乳护士334| heyzo高清中文字幕在线| 水蜜桃一区二区| 黑人精品欧美一区二区蜜桃| 欧美特级一级片| 亚洲精品二三区| 伦一区二区三区中文字幕v亚洲| 日本福利视频导航| 国产剧情av麻豆香蕉精品| xxxxxx国产| 精品偷拍一区二区三区在线看| 欧美一区久久久| 亚洲精品乱码久久久久久蜜桃91| 精品一区二区三区视频| 国产一级视频在线| 亚洲久久在线| 久久观看最新视频| 久久嫩草精品久久久精品| 一区精品在线观看| 欧美高清无遮挡| 亚洲最好看的视频|