[轉]ASP.NET中的委托例子


1.定義

  委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。委托方法的使用可以像其他任何方法一樣,具有參數為返回值。簡單理解Delegate委托(或代理)是一種數據類型:它的變量可以引用到某一個符合要求的方法上,通過委托可以間接地調用該方法。

2.使用

使用委托的四部曲:

  • 定義一種委托類型
  • 委托執行時要調用方法
  • 定義一個委托實例
  • 委托實例的調用

我們可以這樣子認為:委托是一個類,它定義了方法的類型,使得可以將方法當作別一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程序中大量使用If-Else(Switch)語句,同時使得程序具有更好的可擴展性。

3.自定義委托

前面的話有點難理解,接下來我們通過具體的例子分析一下何謂委托,該如何實現委托。現在不是很喜歡搞多國語言化的嗎?看看如何讓我們的程序會說多種語言吧。

 1         /// <summary>
 2         /// the English speaker.
 3         /// </summary>
 4         /// <param name="name">The name.</param>
 5         public void EnglishSpeaker(string name)
 6         {
 7             Console.WriteLine(
 8                 string.Format("Hello my name is {0} and I am English speaker.\n", name));
 9         }
10         /// <summary>
11         /// the Chineses speaker.
12         /// </summary>
13         public void ChineseSpeaker(string name) 
14        {
15             Console.WriteLine(
16                 string.Format("您好我的名字叫{0},我是講普通話的。\n", name));
17         }

好啦現在我們有兩個方法分別是說普通話和英語,現在我們的程序會說普通話和英語啦。現在我們考慮究竟什么時候講普通話什么時候講英語,那不簡單我們加個判斷就OK啦,是的我們可以通過switch或者if else就可以實現啦。

 1         /// <summary>
 2         /// 根據上下文調用不同的方法
 3         /// </summary> 
 4         /// <param name="name">string</param>
 5         /// <param name="lang">enum</param>
 6         private static void Say(string name, Language lang)
 7         {
 8             switch (lang)
 9             {
10                 case Language.Chinese:
11                     Program.ChineseSpeaker(name);
12                     break;
13                 case Language.English:
14                     Program.EnglishSpeaker(name);
15                     break;
16                 default :
17                     break;
18             }
19         }

但假設我們現在又要增加新的語言西班牙語,同樣我們可以增加西班牙語,但我們必須修改switch語句增加判斷,這不符合OOP中的OCP(對擴展開放,對修改關閉原則),這時候委托該登場。

 

1         /// <summary>
2         /// Define speak delegate.
3         /// </summary>
4         /// <param name="name"></param>
5         private delegate void SpeakDelegate(string name);

首先我們定義了一種委托類型SpeakDelegate,然后我們通過修改Say方法看看該如何使用委托變量。

 

 1         /// <summary>
 2         /// The base say function.
 3         /// </summary>
 4         /// <param name="name">The name.</param>
 5         /// <param name="speaker">The speaker.</param>
 6         private static void Say(string name, SpeakDelegate speaker)
 7         {
 8             ///Inoke the speaker function.
 9             speaker(name);
10         }

現在我們的參數已經不是枚舉類型了,而是一個委托類型變量,而且實現的具體代碼也沒有了switch語句了,比之前簡單了許多。現在大家知道如何去調用Say方法吧!沒錯我們只需傳遞一個name和一個具體實現函數名就OK了。

1             ///傳遞函數名進行委托方法綁定
2             Program.Say("鈞航", ChineseSpeaker);
3             Program.Say("JK.Rush", EnglishSpeaker);

 來源:http://www.jzxue.com/wangzhankaifa/asp-net/201104/24-7245.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM