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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

c#之委托和事件的區(qū)別

2019-11-17 03:20:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

c#之委托和事件的區(qū)別

1、什么是委托,這里就不做介紹了,如果想了解可以查看博客:http://m.survivalescaperooms.com/xiaoxiaogogo/p/3571494.html

下面開(kāi)始對(duì)事件進(jìn)行介紹

1、定義事件以及事件的編譯原理

首先定義事件對(duì)應(yīng)的委托:

1 public delegate void ThreeClickEventDel();

然后對(duì)應(yīng)事件變量:(其實(shí)就是在委托前面加一個(gè)event)

public event ThreeClickEventDel ThreeClickEvent;

反編譯之后:是:一個(gè)“私有委托”和兩個(gè)“公有”的“add”和“remover”方法

1)因?yàn)槭撬接形校核灾挥蓄?lèi)的內(nèi)部可以調(diào)用,在類(lèi)外部就不能被調(diào)用。創(chuàng)建的類(lèi)的實(shí)例也是不能調(diào)用的。所以事件是安全的。

因?yàn)樗接?,所以不能使?“=”對(duì)事件進(jìn)行賦值

2)因?yàn)橛?“公有” 的add 和 remove,,所以 類(lèi)的實(shí)例 可以對(duì)事件 進(jìn)行 “+=”和“-=”對(duì)事件進(jìn)行 添加 事件和 刪除事件(所以在類(lèi)的外部可以對(duì)事件進(jìn)行賦值,但是不能調(diào)用)

2、委托和事件的區(qū)別:

1、委托時(shí)數(shù)據(jù)類(lèi)型,但是 事件 是數(shù)據(jù)類(lèi)型的變量(并且是私有委托)

2、委托可以在類(lèi)的外部被調(diào)用,但是事件不能再類(lèi)的外部,通過(guò)類(lèi)的實(shí)例進(jìn)行調(diào)用(因?yàn)槭撬接形校?/p>

3、委托可以通過(guò)“=”、“+=”、“-=”進(jìn)行賦值,但是事件只能通過(guò)“+=”和“-=”對(duì)事件進(jìn)行賦值。(因?yàn)槭录撬接形校?/p>

3、委托也能注冊(cè)事件,為什么會(huì)衍生出事件呢?

委托注冊(cè)事件:

 1     //定義一個(gè)委托 2     public delegate void JingGaoDel(); 3     class PRogram 4     { 5         static void Main(string[] args) 6         { 7             GuoluFang Guolu = new GuoluFang(); 8             //為 委托注冊(cè) 事件 9             Guolu.jingGao = delegate()10             {11                 Console.WriteLine("水已經(jīng)燒開(kāi)了!");12             };13             for (int i = 0; i <100; i++)14             {15                 Guolu.ShaoShui();16             }17             Console.ReadKey();18         }19     }

為什么衍生事件:

1、因?yàn)槭录荒芡ㄟ^(guò)“+=”和“-=”進(jìn)行賦值,所以可以避免像委托那樣(可能用“=”賦值將原有的事件沖掉)。

2、事件雖然是public 定義的,但是會(huì)編譯成“私有的委托”,所以事件只能在類(lèi)的內(nèi)部被調(diào)用,類(lèi)的實(shí)例不能被調(diào)用。

4、使用事件的練習(xí)(窺探微軟 的事件)

創(chuàng)建驗(yàn)證控件:

添加一個(gè)UserControl控件,設(shè)計(jì)如下:

寫(xiě)后臺(tái)代碼:

 1     public delegate void UserVilidateDel(object sender,MyEventArgs e); 2  3     public partial class UserVilidateControl : UserControl 4     { 5         public UserVilidateControl() 6         { 7             InitializeComponent(); 8         } 9         public event UserVilidateDel UserViliDating; 10 11         private void btnLogin_Click(object sender, EventArgs e)12         {13             string userName = txtUserName.Text.Trim();14             string pwd = txtPwd.Text.Trim();15             MyEventArgs eArgs = new MyEventArgs();16             eArgs.UserName = userName;17             eArgs.Pwd = pwd;18             eArgs.IsSuccess = false;19             UserViliDating(this, eArgs);20             if (eArgs.IsSuccess)21             {22                 this.txtUserName.BackColor = Color.Blue;23                 this.txtPwd.BackColor = Color.Blue;24             }25             else26             {27                 this.txtUserName.BackColor = Color.Red;28                 this.txtPwd.BackColor = Color.Red;29             }30         }31     }32 33     public class MyEventArgs34     {35         public string UserName { set; get; }36         public string Pwd { set; get; }37         public bool IsSuccess { set; get; }38     }
控件后臺(tái)代碼

主窗體添加驗(yàn)證控件:

后臺(tái)代碼:

 1         private void Form1_Load(object sender, EventArgs e) 2         { 3             //注冊(cè)事件 4             userVilidateControl1.UserViliDating += new UserVilidateDel(userVilidateControl1_UserViliDating); 5         } 6  7         //創(chuàng)建對(duì)應(yīng)方法事件 8         void userVilidateControl1_UserViliDating(object sender, MyEventArgs e) 9         {10             if (e.UserName == "admin" && e.Pwd == "123")11             {12                 e.IsSuccess = true;13             }14         }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 繁昌县| 邵东县| 黄山市| 长治县| 双牌县| 长宁区| 洪雅县| 克东县| 玉门市| 玉山县| 泰来县| 三都| 长治县| 台江县| 六枝特区| 西乡县| 寻甸| 大渡口区| 南通市| 长宁区| 大悟县| 托里县| 垣曲县| 武功县| 敦化市| 马尔康县| 宝应县| 建湖县| 太谷县| 梅河口市| 通化市| 浙江省| 隆德县| 长顺县| 闸北区| 南阳市| 洪雅县| 东阿县| 徐闻县| 苍梧县| 正安县|