亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

【.NET基礎】--委托、事件、線程(2)

2019-11-14 15:58:17
字體:
來源:轉載
供稿:網友

本文介紹event的使用以及原理,本文接上一篇文章的Demo繼續【下載上一篇Demo】

上一篇我們在類(dg_SayHi.cs)里面定義代理了4個Delegate,然后在Button的后臺事件中 新建委托對象并初始化,這樣去使用委托。本文我們看一下event的使用以及原理.

1,現在我們在Person類里面 定義一個dg_SayHi委托變量,這樣新建person類對象后就可以操作這個委托變量

  A,Person類添加委托變量

 public class Person    {        #region 姓名        string name;        public string Name        {            get { return name; }            set { name = value; }        }        #endregion        #region 年齡        int age;        public int Age        {            get { return age; }            set { age = value; }        }        #endregion        //定義委托變量        public dg_SayHi dgSayHi;      }
View Code

  B,添加按鈕btnPerson以及btnPersonDelegate_Click事件,事件中我們使用委托對象

  PRivate void btnPersonDelegate_Click(object sender, EventArgs e)        {            Person per = new Person();            //創建委托對象并賦值給person對象的dgSayHi對象            per.dgSayHi = new dg_SayHi(SayHiCN);            per.dgSayHi += SayHiEN;            //調用委托對象            per.dgSayHi();        }

  C,這樣點擊按鈕的時候,調用SayHiCN和SayHiEN方法,分別先后彈出窗口 “你好上海” 和 “hi shanghai”。

  D,由于是直接操作委托對象dgSayHi, 這樣就可以直接把添加過方法的委托對象給清空或者重置,我們更新button后臺事件如下:

     private void btnPersonDelegate_Click(object sender, EventArgs e)        {            Person per = new Person();            //創建委托對象并賦值給person對象的dgSayHi對象            per.dgSayHi = new dg_SayHi(SayHiCN);            per.dgSayHi += SayHiEN;            //下面的代碼把之前添加在委托里的方法給清空了,然后把委托對象給重置了            per.dgSayHi = null;            per.dgSayHi = new dg_SayHi(SayHiEN);            //調用委托對象            per.dgSayHi();        }
View Code

  E,上面這樣,委托對象在運行的過程中就會被不合理清空掉,這樣是不安全的。

 

2,為了對委托對象的操作進行限制,我們把委托對象定義為私有,然后添加像屬性一樣的操作委托對象的方法

  A,更新Person類,把委托變為私有,并添加操作私有變量的方法

  public class Person    {        #region 姓名        string name;        public string Name        {            get { return name; }            set { name = value; }        }        #endregion        #region 年齡        int age;        public int Age        {            get { return age; }            set { age = value; }        }        #endregion        #region 實現對委托變量的保護        //定義委托變量        private dg_SayHi dgSayHi;        public void AddMethod(dg_SayHi Para_dgSayHi)        {            dgSayHi += Para_dgSayHi;        }        public void RemoveMethod(dg_SayHi Para_dgSayHi)        {            dgSayHi -= Para_dgSayHi;        }        public void PrintMethod()        {            dgSayHi();        }        #endregion    }
View Code

  B,這樣,我們就不能直接操作委托對象了,只有借助類似屬性的兩個方法去給委托對象添加、移除方法,更新Button事件如下:

     private void btnPersonDelegate_Click(object sender, EventArgs e)        {            Person per = new Person();            per.AddMethod(SayHiCN);            per.AddMethod(SayHiEN);            per.PrintMethod();        }

  C,上面這樣我們無法直接操作委托對象,從而實現了對委托對象的保護。

3,實際上.net的event幫我們做好了像步驟2一樣的封裝,從而實現對委托對象的保護

  A,我們在Person類中再次添加event聲明的委托如下:

     //定義事件,實現和上面的封裝一樣的功能        public event dg_SayHi dgSayHiByEvent;        public void PrintMethodEvent()        {            dgSayHiByEvent();        }

  B,button后臺事件中,我們對委托對象的操作也就只能去添加移除方法、而不能去清空或者New,如下:

      private void btnPersonDelegate_Click(object sender, EventArgs e)        {            Person per = new Person();            ////創建委托對象并賦值給person對象的dgSayHi對象            //per.dgSayHi = new dg_SayHi(SayHiCN);            //per.dgSayHi += SayHiEN;            ////下面的代碼把之前添加在委托里的方法給清空了,然后把委托對象給重置了            //per.dgSayHi = null;            //per.dgSayHi = new dg_SayHi(SayHiEN);            per.dgSayHiByEvent += SayHiCN;  //事件實現了對委托對象的保護,可以+=、-=;但是不能再像上面初始化或者是清空            per.dgSayHiByEvent += SayHiEN;           //不可以直接調用委托對象,而是通過對象的方法調用;不可以這樣寫: per.dgSayHiByEvent();            per.PrintMethodEvent();        }

  C,.NET Reflector中我們查看一下,我們加event的委托,實際上是 1,創建了Private dgSayHiByEvent 委托對象  2, event事件中添加了兩個方法:add和remove方法;這兩個方法去操作Private dgSayHiByEvent委托對象。(和set,get類似)

  

  D,所以event關鍵字本質就是做了兩個事情,從而實現對委托對象的保護:

    1,創建了一個對應的Private委托對象

    2,然后添加Add和Remove方法訪問、操作這個Private委托對象。

  

4,委托和事件的對比:

  A, 委托是類,只定義委托對象的話,沒法實現對委托對象的保護,外部可以清空和新建

  B, 事件是委托對象,事件自身實現了對委托對象的保護,并提供了供外部訪問的兩個方法

  C,事件只能對add,remove自己,不能賦值。事件只能"注冊自己 += " , “注銷自己 -= ” 不能=,外界不可以注銷其他注冊者,外界不可以主動觸發事件。

 

【本文Demo下載】

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本免费一区二区三区视频观看| 国产精品成人播放| 亚洲а∨天堂久久精品9966| 欧美做受高潮1| 欧美猛交免费看| 国产日韩欧美夫妻视频在线观看| 97久久精品人人澡人人爽缅北| 国产视频亚洲精品| 亚洲精品永久免费精品| 日韩一区av在线| 日韩成人av在线播放| 欧美电影免费观看网站| 亚洲性视频网址| 国产日产亚洲精品| 国产婷婷成人久久av免费高清| 亚洲福利在线观看| 久久这里只有精品视频首页| 国产日韩欧美在线| 中文字幕日韩av综合精品| 欧美与欧洲交xxxx免费观看| 国产福利视频一区二区| 亚洲精品wwwww| 欧美一区在线直播| 97视频在线观看成人| 亚洲视频在线看| 国产成人在线精品| 日产精品99久久久久久| 欧美第一黄网免费网站| 成年无码av片在线| 青青久久av北条麻妃海外网| 欧美日韩国产精品一区| 亚洲а∨天堂久久精品9966| 欧美人交a欧美精品| 日本高清不卡的在线| 欧美成人三级视频网站| 国产精品一区二区女厕厕| 国产精品入口日韩视频大尺度| 久青草国产97香蕉在线视频| 国产日本欧美在线观看| 91在线免费看网站| 午夜精品久久久久久99热| 日韩中文字幕第一页| 黑人极品videos精品欧美裸| 日韩av不卡在线| 中文字幕日韩精品有码视频| 91九色视频导航| 国产精品久久久亚洲| 欧美激情国产日韩精品一区18| 国产精品久久久久av| 欧美精品日韩www.p站| 成年人精品视频| 亚洲精品一区二区三区婷婷月| 韩日欧美一区二区| 2019中文字幕在线观看| 欧美区二区三区| 亚洲第一区中文字幕| 亚洲人成人99网站| 亚洲成色999久久网站| 性色av香蕉一区二区| 亚洲综合中文字幕在线观看| 国产精品大片wwwwww| 欧美中文在线免费| 欧美另类老女人| 欧美日韩国产成人在线| 久久久久久国产精品久久| 亚洲第五色综合网| 97久久精品视频| 国产一区二区在线免费视频| 成人免费观看网址| 欧美第一淫aaasss性| 亚洲国产精品悠悠久久琪琪| 欧美中文字幕第一页| 亚洲精品成a人在线观看| 亚洲精品日韩av| 国产精品亚发布| 精品亚洲一区二区三区在线播放| 亚洲人成毛片在线播放| 91色在线观看| 中文字幕9999| 亚洲欧美制服另类日韩| 91免费国产视频| 亚洲精品一区二区三区婷婷月| 性色av一区二区咪爱| 日韩女在线观看| 色yeye香蕉凹凸一区二区av| 日韩欧美在线第一页| 久久久久久欧美| 国模私拍视频一区| 少妇av一区二区三区| 伊人av综合网| 国产精品国语对白| 中文字幕亚洲欧美日韩2019| 在线观看国产精品日韩av| 国产中文字幕91| 亚洲自拍欧美色图| 国产a∨精品一区二区三区不卡| 日韩中文有码在线视频| 久久天天躁狠狠躁夜夜躁2014| 欧美性色xo影院| 亚洲精品日韩在线| 亚洲18私人小影院| 欧美激情国产精品| 欧美另类69精品久久久久9999| 国产丝袜一区二区三区| 欧美性猛交xxxx偷拍洗澡| 欧美精品在线观看| 午夜精品久久久久久久男人的天堂| 欧美富婆性猛交| 97国产精品视频| 91在线精品视频| 欧美日韩一区二区在线播放| 91精品久久久久久久久久| 日韩中文视频免费在线观看| 成人精品一区二区三区电影免费| 国产精品免费一区豆花| 日韩a**站在线观看| 亚洲成人精品视频| 欧美日韩国产色视频| 久久午夜a级毛片| 亚洲欧洲在线视频| 亚洲免费伊人电影在线观看av| 97在线免费观看| www.99久久热国产日韩欧美.com| 久久99精品国产99久久6尤物| 亚洲国产精品久久精品怡红院| 亚洲国产精品一区二区三区| 日韩一区二区三区xxxx| 国产亚洲精品久久久优势| 国产亚洲精品久久久| 国产一区二区成人| 热久久免费国产视频| 国产精品草莓在线免费观看| 久热在线中文字幕色999舞| 国自产精品手机在线观看视频| 欧美成人免费小视频| 日韩久久午夜影院| 亚洲欧洲免费视频| 久久成年人视频| 欧美伦理91i| 欧美专区在线视频| 精品国产91乱高清在线观看| 久久99国产精品久久久久久久久| 精品亚洲一区二区三区在线观看| 国产一区二区三区高清在线观看| 国产精品三级网站| 91高清视频在线免费观看| 91精品国产91久久久久久久久| 欧美日韩福利电影| 国产精品久久国产精品99gif| 欧美日韩国产色| 91精品久久久久久久久久| 久久精品国产91精品亚洲| 欧美视频中文字幕在线| 国产成人精品久久久| 国产精品av免费在线观看| 精品一区二区电影| 91精品中国老女人| 欧美体内谢she精2性欧美| 欧美野外wwwxxx| 91欧美视频网站| 成人久久久久爱| 日韩麻豆第一页| 国产中文欧美精品| 国产美女搞久久|