国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中的委托概念

2019-11-17 03:59:45
字體:
來源:轉載
供稿:網友
委托的概念
作者:梁斌玉 摘自《C#初學課堂》即將出版
BeginnerClassroom@163.com
http://m.survivalescaperooms.com/BeginnerClassroom
       有時我們需要將一個函數作為另一個函數的參數,這時就要用到委托(Delegate)機制。委托是一個較難講清楚的概念,筆者苦思數日,終于想出了一個巧妙的例子。

       下面我們設計一個馬戲表演函數RunCircus(),它的第一個參數是代表動物的函數,傳給它什么樣的動物,就進行什么動物的表演。請新建一個名為“Delegate”的項目,然后添加如下代碼。

試一試:定義委托

        //《C#初學課堂》     
        //函數:狗表演

        static void DogAct(string name)

        {

            Console.WriteLine("Hello,I am " + name + "!");

            Console.WriteLine(@"

                    .----.

                 _.'__    `.

             .--(#)(##)---/#/

           .' @          /###/

           :         ,   #####

            `-..__.-' _.-/###/

                  `;_:    `''

                .'''''''`.

               /,Snoopy ,/

              //  COOL!  //

              `-._______.-'

              ___`. | .'___

             (______|______)");

        }

        //函數:貓表演

        static void CatAct(string name)

        {

            Console.WriteLine("Hello,I am " + name + "!");

            Console.WriteLine(@"

              .-. __ _ .-.

               |  `  / /  |

               /     '.()--/

              |         '._/

             _| O   _   O |_

             =/    '-'    /=

               '-._____.-'

               /`//___//`/

              ///o     o///

             (_|         |_)

               |____,____|

               (____|____)");

        }

        //函數:獅子表演

        static void LionAct(string name)

        {

            Console.WriteLine("Hello,I am " + name + "!");

            Console.WriteLine(@"

                      ,%%%%%%%%,

                     ,%%//%%%%//%%

                    ,%%%/c "" J/%%%

          %.       %%%%/ o  o /%%%

          `%%.     %%%%    _  |%%%

            `%%     `%%%%(__Y__)%%'

            //       ;%%%%`/-/%%%'

           ((       /  `%%%%%%%'

            //    .'          |

             //  /       /  | |

              ///         ) | |

               /         /_ | |__

               (___________)))))))");

        }

        //定義委托

        delegate void AnimalAct(string name);

        //函數:馬戲表演(第一個參數為AnimalAct型委托)

        static void RunCircus(AnimalAct animalAct, string name)

        {

            animalAct(name);

        }

        static void Main(string[] args)

        {

            //把函數DogAct()轉換為AnimalAct型委托

            AnimalAct deleDogAct = new AnimalAct(DogAct);

            //把委托deleDogAct傳給函數RunCircus()

            RunCircus(deleDogAct, "Snoopy");

            //把函數CatAct()轉換為AnimalAct型委托,并傳給函數RunCircus()

            RunCircus(new AnimalAct(CatAct), " Kitty ");

        }

            

            運行結果如下:

          


     《C#初學課堂》


函數RunCircus(AnimalAct animalAct, string name)的第一個參數實際上是一個代表動物的函數,傳給它什么樣的函數,它就用什么樣的動物進行表演。但為了進行嚴格的類型檢查,我們不能直接把函數的名稱傳遞給它,而應先定義一個委托(Dlelegate),即定義一種“函數類型”。

       委托用關鍵字delegate聲明,上面的語句定義了一種名為AnimalAct的委托(函數類型),明確規定了委托的參數類型和返回值類型。當我們需要把某個函數作為參數時,就要先把它轉換為委托實例。


   然后把這個委托實例以參數的形式傳遞給調用它的函數。


由此可以看出委托實例deleDogAct實際上是函數DogAct()的別名,顯然委托和被委托函數應具有相同的參數類型和返回類型。

在我們的程序中,馬戲團總是調用函數RunCircus()進行表演。定義函數RunCircus()時,我們不知道也不關心傳遞給它的委托代表哪個函數,直到調用RunCircus()函數,并把實際參數傳遞給它時,這個函數才具體化。傳給它什么樣的實際參數,就進行什么樣的表演,傳給它deleDogAct委托,馬戲團就進行狗的表演;傳給它deleCatAct委托,馬戲團就進行貓的表演;傳給它deleLionAct委托,馬戲團就進行獅子表演。因此以委托為參數的函數具有一定的通用性。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/tianxk/archive/2009/01/10/3746081.aspx

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/tianxk/archive/2009/01/10/3746081.aspx
上一篇:C#==>結構

下一篇:C#的前途

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漳州市| 郁南县| 武清区| 合川市| 千阳县| 宁乡县| 青岛市| 星座| 仪陇县| 宁蒗| 固原市| 卢氏县| 皋兰县| 淮滨县| 临武县| 宣武区| 霍城县| 金川县| 久治县| 临漳县| 民县| 池州市| 云霄县| 宝兴县| 石景山区| 汾阳市| 庐江县| 田林县| 大冶市| 长垣县| 攀枝花市| 永新县| 普宁市| 菏泽市| 隆德县| 澄江县| 嘉义市| 辽宁省| 安泽县| 沙坪坝区| 广汉市|