一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C#3.0學(xué)習(xí)筆記(7)淺談委托

 kittywei 2012-02-24

 

1,  什么是委托?

  答:委托即具有相同簽名和返回值類型的有序方法列表。

  注意:

  1>     方法的列表稱為調(diào)用列表(invocation list)。

  2>     當(dāng)委托被調(diào)用時(shí),方法列表中的每一個(gè)方法都將被調(diào)用。

  3>     委托是引用類型數(shù)據(jù),因此有引用和對(duì)象。

2,  如何聲明委托?

  delegate void MyDel(int x);

  注:

  1>     delegate為關(guān)鍵字。

  2>     void表示返回類型,如果有返回值的話就是對(duì)應(yīng)的返回類型,如int。

  3>     MyDel表示委托名稱。

  4>     MyDel(int x)表示簽名。

3,  創(chuàng)建委托對(duì)象的兩種方法?

  方法1:使用帶new運(yùn)算符的對(duì)象創(chuàng)建表達(dá)式。

      MyDel del=new MyDel(ClassA.method1);

  方法2:使用快捷語(yǔ)法,僅由類名和方法名構(gòu)成,使用快捷語(yǔ)法是因?yàn)樵诜椒Q和其相應(yīng)的委托類型之間有隱式轉(zhuǎn)換。

      MyDel del=new ClassA.method1;

4,  委托調(diào)用?

  1>     無(wú)返回值和參數(shù)的委托調(diào)用:

namespace delegate1

 

{

 

    /*調(diào)用無(wú)返回值和參數(shù)的委托*/

 

    delegate void PrintFunction(); //定義一個(gè)沒有返回值和參數(shù)的委托類型。

 

    class Program

 

    {

 

        static voidMain(string[] args)

 

        {

 

            Test t = new Test();

 

            PrintFunction pf;//創(chuàng)建一個(gè)空委托對(duì)象

 

            pf = t.Print1;//初始化委托

 

            pf += Test.Print2;//使用+=運(yùn)算符為委托增加方法。注意靜態(tài)方法的調(diào)用方法(類名.方法名)。

 

            pf += t.Print1;

 

            pf += Test.Print2;

 

            if (pf != null)//判斷委托中是否含有方法

 

            {

 

                pf(); //調(diào)用委托

 

            }

 

            else

 

            {

 

                Console.WriteLine("委托中沒有任何方法!");

 

            }

 

            Console.ReadKey();

 

        }

 

    }

 

    class Test

 

    {

 

        public void Print1()

 

        {

 

            Console.WriteLine("Print1---實(shí)例化方法");

 

        }

 

        public static void Print2()

 

        {

 

            Console.WriteLine("Print2---靜態(tài)方法");

 

        }

 

    }

 

}

   程序輸出結(jié)果為:

 

\

 

  2>    帶返回值委托的調(diào)用:

namespace delegate2

 

{

 

    /*調(diào)用帶返回值的委托*/

 

    /*

 

     1,調(diào)用方法列表中最后一個(gè)方法返回的值就是委托調(diào)用返回的值。

 

     2,調(diào)用方法列表中所有其它方法的返回值都會(huì)被忽略。

 

     */

 

    delegate int Mydel();

 

    class Program

 

    {

 

        static voidMain(string[] args)

 

        {

 

            MyClass mc = new MyClass();

 

            Mydel mDel = mc.Add2;

 

            mDel += mc.Add3;

 

            mDel += mc.Add2;

 

            Console.WriteLine("Value:{0}",mDel());

 

            Console.ReadKey();

 

        }

 

    }

 

    class MyClass

 

    {

 

        int IntValue = 5;

 

        public int Add2()

 

        {

 

            IntValue += 2;

 

            return IntValue;

 

        }

 

        public int Add3()

 

        {

 

            IntValue += 3;

 

            return IntValue;

 

        }

 

    }

 

}

          程序輸出的結(jié)果為:

\

 

 

   3>    帶引用參數(shù)的委托的調(diào)用:

namespace delegate3

 

{

 

    /*調(diào)用帶引用參數(shù)的委托*/

 

    /*

 

     1,在調(diào)用委托列表中的下一個(gè)方法時(shí),參數(shù)的新值(不是初始值)會(huì)傳給下一個(gè)方法。

 

    */

 

    delegate void MyDel(ref int x);

 

    class Program

 

    {

 

        static voidMain(string[] args)

 

        {

 

            MyClass mc = new MyClass();

 

            MyDel mDel = mc.Add2;//Add2(x=5)

 

            mDel += mc.Add3;//Add3(x=7)

 

            mDel += mc.Add2;//Add2(x=10)

 

            int x = 5;

 

            mDel(ref x);

 

            Console.WriteLine("委托mDel的值為:{0}",x);

 

            Console.ReadKey();

 

        }

 

    }

 

    class MyClass

 

    {

 

        public void Add2(ref int x)

 

        {

 

            x += 2;

 

        }

 

        public void Add3(ref int x)

 

        {

 

            x += 3;

 

        }

 

    }

 

}

         程序的輸出結(jié)果為:

 

\

 

   4>    匿名方法和lambda表達(dá)式:

    匿名方法定義:匿名方法是在初始化委托時(shí)內(nèi)聯(lián)(inline)聲明的方法。

namespace delegate4

 

{

 

    /*匿名方法和lambda表達(dá)式*/

 

    delegate double MyDel(int par);

 

    class Program

 

    {

 

        static voidMain(string[] args)

 

        {

 

            MyDel del = delegate(int x) { return x + 1; };//匿名方法。

 

            MyDel le1 = (int x) => { return x + 1; };//lambda表達(dá)式。省略關(guān)鍵字delegate

 

            MyDel le2 = (x) => { return x + 1; };//lambda表達(dá)式。省略類型參數(shù),因?yàn)榫幾g器可以從委托的聲明中知道委托參數(shù)的類型。

 

            MyDel le3 = x => { return x + 1; };//lambda表達(dá)式。省略圓括號(hào),因?yàn)橹挥幸粋€(gè)隱式類型參數(shù)。

 

            MyDel le4 = x => x + 1;//lambda表達(dá)式。省略語(yǔ)句塊。

 

            Console.WriteLine("委托del的值為:{0}", del(12));

 

            Console.WriteLine("委托l(wèi)e1的值為:{0}", le1(12));

 

            Console.WriteLine("委托l(wèi)e2的值為:{0}", le2(12));

 

            Console.WriteLine("委托l(wèi)e3的值為:{0}", le3(12));

 

            Console.WriteLine("委托l(wèi)e4的值為:{0}", le4(12));

 

            Console.ReadKey();

 

        }

 

    }

 

}

    程序輸出結(jié)果為:

 

\

 

 以上是我對(duì)委托的理解和總結(jié),各位園友們?nèi)绻X得總結(jié)得還不錯(cuò)的話請(qǐng)給點(diǎn)鼓勵(lì),如果覺得還有不足的地方也歡迎指證,讓我們一起努力吧,加油!

 

 


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲一区二区三区熟女少妇| 欧美黑人在线一区二区| 午夜精品福利视频观看| 日本 一区二区 在线| 午夜精品一区二区三区国产| 久久精品国产99国产免费| 亚洲中文字幕亲近伦片| 一区二区三区在线不卡免费| 在线免费不卡亚洲国产| 国产成人精品视频一区二区三区 | 邻居人妻人公侵犯人妻视频| 亚洲人妻av中文字幕| 日韩一级免费中文字幕视频| 粉嫩国产一区二区三区在线| 极品少妇一区二区三区精品视频| 亚洲精品中文字幕熟女| 国产超碰在线观看免费| 福利视频一区二区在线| 91欧美日韩中在线视频| 亚洲精选91福利在线观看| 在线观看日韩欧美综合黄片| 99久只有精品免费视频播放| 中文字字幕在线中文乱码二区| 99久久精品午夜一区| 国产一区二区三区香蕉av| 少妇人妻中出中文字幕| 中文字幕一区二区熟女| 国产一区二区三区四区中文| 亚洲视频一区二区久久久| 在线免费观看黄色美女| 日本不卡在线视频中文国产| 熟女少妇久久一区二区三区| 欧美日韩免费黄片观看| 国产一区二区三区色噜噜| 国产欧美日韩精品一区二| 中国一区二区三区不卡| 91香蕉国产观看免费人人| 日韩视频在线观看成人| 九九九热视频免费观看| 日本欧美一区二区三区就| 日韩一区欧美二区国产|