C#-委托與事件

委托

委托:是一個(gè)類肢专、是一種數(shù)據(jù)類型
定義語(yǔ)法: 訪問(wèn)修飾符 關(guān)鍵字(delegate) 返回值 標(biāo)識(shí)符(參數(shù)列表)
委托的綁定:和委托的返回值一樣,參數(shù)一樣的方法都可以綁定到此委托
委托鏈的使用:通過(guò)+=刹悴、-=給委托鏈添加和刪除一個(gè)綁定方法。
委托使用之前需要先定義
三種使用方式
1.直接方法賦值使用
2.匿名函數(shù)使用:
匿名函數(shù)法:delagate + 參數(shù) + 方法體{return 返回值默認(rèn)值狈邑;}
3.Lambda表達(dá)式使用:
格式:(參數(shù))=>{}
當(dāng)只有一個(gè)參數(shù)政鼠,一個(gè)返回值的時(shí)候,寫(xiě)Lambda表達(dá)式時(shí)律姨,可以將參數(shù)的小括號(hào)振峻、參數(shù)的類型省略,將方法大括號(hào)择份,return語(yǔ)句的return也省略扣孟,語(yǔ)句后的分號(hào)也可以省略。

namespace 委托
{
    delegate void MyDelegate();

    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.SayHello(Fun);
        }
        static void Fun()
        {
            Console.WriteLine("xixi");
        }
    }

    class Person
    {
        public void SayHello(MyDelegate dele)
        {
            dele();
        }
    }
}
//創(chuàng)建委托對(duì)象
            MyDelegate dele1 = new MyDelegate(Fun);
            MyDelegate dele2 = Fun;
            MyDelegate dele3 = dele1;
            //調(diào)用委托對(duì)象
            dele1();
            dele2();
            dele3();

委托:一個(gè)委托對(duì)象可以綁定多個(gè)方法,只要方法簽名和其一致即可以綁定,委托對(duì)象在調(diào)用時(shí),會(huì)依次執(zhí)行綁定的方法,卸載未曾綁定的方法不會(huì)報(bào)錯(cuò).

... ...
ColDelegate col = new ColDelegate(Add);
            
            col += Sub;
            col -= Add;

            Console.WriteLine(col (5, 10));
        }

        static int Sub(int a, int b)
        {
            return a - b;
        }

        static int Add(int a, int b)
        {
            return a + b;
        }

委托中方法的表現(xiàn)形式
除了常規(guī)的表現(xiàn)形式還有匿名函數(shù)和Lambda表達(dá)式

//匿名函數(shù):delegate(形參列表){}
            Person student11 = new Person();
            student11.SayHello(delegate () { Console.WriteLine("222"); });
            ColDelegate col2 = delegate (int a, int b) { return a / b; };
            Console.WriteLine(col2(20,10));

            //Lambda 表達(dá)式
            //省略某些元素:當(dāng)只有一個(gè)參數(shù)時(shí),可以只寫(xiě)形參,
            //當(dāng)方法體為一條有返回值的語(yǔ)句,可以省略{}和return 關(guān)鍵字
            StrDelegate myStr = (int a) => { return a.ToString(); };
            StrDelegate str = a => a.ToString();

通過(guò)委托來(lái)實(shí)現(xiàn)前面的排序,以實(shí)現(xiàn)我們可以隨意定義兩個(gè)比較的是什么東西
委托的兩個(gè)參數(shù)為泛型以此來(lái)實(shí)現(xiàn),任意類型

delegate bool ComAmyObj<T>(T a,T b);
//對(duì)任意可比較類型數(shù)據(jù)進(jìn)行升序排序
    class MyClass01
    {
        public T[] ArraySort<T>(T[] t,ComAmyObj<T> comAmyObj) //where T : IComparable
        {
            if (t.Length > 1)
            {
                for (int n = 0; n < t.Length; n++)
                {
                    for (int m = 0; m < t.Length - n - 1; m++)
                    {
                        //如果前者大于后者
                        if (comAmyObj(t[m], t[m + 1]))
                        {
                            T temp = t[m + 1];
                            t[m + 1] = t[m];
                            t[m] = temp;
                        }
                    }
                }
            }
            return t;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass02[] c1 = new MyClass02[3];
            c1[0] = new MyClass02();
            c1[0].i = 11110;
            c1[1] = new MyClass02();
            c1[1].i = 230;
            c1[2] = new MyClass02();
            c1[2].i = 10;

            MyClass01 c3 = new MyClass01();
            // c1 = c3.ArraySort<MyClass02>(c1);
            c1 = c3.ArraySort<MyClass02>
                (c1, (MyClass02 i, MyClass02 j) => { if (i.i > j.i) { return true; } else return false; });
            Console.WriteLine(c1[0].i);
            Console.WriteLine(c1[1].i);
            Console.WriteLine(c1[2].i);
        }
    }

事件

event是一種定義好的數(shù)據(jù)類型荣赶,對(duì)委托對(duì)象實(shí)現(xiàn)封裝凤价,保護(hù)委托對(duì)象不被直接復(fù)制修改鸽斟。在非聲明事件的類,只可以用+=利诺、-=的方式富蓄,掛載、卸載事件慢逾。
聲明語(yǔ)法:訪問(wèn)修飾符 event 委托 名字立倍;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氛改,隨后出現(xiàn)的幾起案子帐萎,更是在濱河造成了極大的恐慌,老刑警劉巖胜卤,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疆导,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡葛躏,警方通過(guò)查閱死者的電腦和手機(jī)澈段,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舰攒,“玉大人败富,你說(shuō)我怎么就攤上這事∧η裕” “怎么了兽叮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猾愿。 經(jīng)常有香客問(wèn)我鹦聪,道長(zhǎng),這世上最難降的妖魔是什么蒂秘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任泽本,我火速辦了婚禮,結(jié)果婚禮上姻僧,老公的妹妹穿的比我還像新娘规丽。我一直安慰自己,他們只是感情好撇贺,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布赌莺。 她就那樣靜靜地躺著,像睡著了一般松嘶。 火紅的嫁衣襯著肌膚如雪雄嚣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音缓升,去河邊找鬼鼓鲁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛港谊,可吹牛的內(nèi)容都是我干的骇吭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼歧寺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼燥狰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起斜筐,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤龙致,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后顷链,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體目代,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年嗤练,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榛了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煞抬,死狀恐怖霜大,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情革答,我是刑警寧澤战坤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站残拐,受9級(jí)特大地震影響湖笨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蹦骑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望臀防。 院中可真熱鬧眠菇,春花似錦、人聲如沸袱衷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)致燥。三九已至登疗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辐益。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工断傲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人智政。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓认罩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親续捂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垦垂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359