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

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

C#委托和事件例析

2019-11-17 03:19:53
字體:
來源:轉載
供稿:網友

C#委托和事件例析

  我是對java了解相對較多,而對C#則是因工作需要才去看了一下,C#跟Java在語法上非常相似,而最初讓我比較困惑的就是委托、事件部分,相信大多數初學者也有類似的困惑。經過跟Java的對比學習,發現這其實跟Java的監聽、事件是等同的,只是表述上不同罷了。

  委托+事件是觀察者模式的一個典型例子,所謂的委托其實就是觀察者,它會關心某種事件,一旦這種事件被觸發,這個觀察者就會行動。

  下面是最近寫的一個例子,相信能夠加深大家對委托和事件的理解。

using System;using System.Collections.Generic;using System.Text;namespace Consoleapplication1{    //聲明一個委托    public delegate void TimeEventHandler(object obj, TimeEventArgs args);    class PRogram    {        static void Main(string[] args)        {            Clock clock = new Clock(); //實例化一個時鐘                        MyClassEventHandler tehc = new MyClassEventHandler(); //實例化一個觀察者類            //將事件跟我們定義的觀察者進行連接            //這樣,clock就會知道,每當TimeChanged事件被觸發,就會去通知這個觀察者            //注意我們連接的時候使用的并不是直接的觀察者類實例中的ShowTime()方法            //而是一個委托,并在這個委托中傳遞ShowTime()方法,這也是"委托"的真正意義所在:            //我有一個方法,但我委托你來幫我關聯到事件,因為事件只會直接跟委托打交道,            //而不是觀察者的具體某個方法            clock.TimeChanged += new TimeEventHandler(tehc.ShowTime);            clock.go();        }    }    //TimeEventArgs是我們自己定義的一個類,用于保存事件中的參數.這里我們分別保存時間的時分秒    public class TimeEventArgs:EventArgs    {        private int hour;        private int minute;        private int second;        public TimeEventArgs(int hour,int minute,int second)        {            this.hour = hour;            this.minute = minute;            this.second = second;        }        public int Hour{            get {                return this.hour;            }        }        public int Minute {            get {                return this.minute;            }        }        public int Second {            get {                return this.second;            }        }    }    //觀察者類,它有一個符合我們上面定義的"委托"的方法    //也就是void ShowTime(object obj,TimeEventArgs args)    //從這個方法的定義可以看到,我們只會關心返回類型和方法的參數,而方法名稱則無所謂    class MyClassEventHandler    {        public void ShowTime(object obj,TimeEventArgs args)        {            Console.WriteLine("現在時間:"+args.Hour+":" + args.Minute + ":" + args.Second);        }    }    //時鐘類    class Clock    {        //我們在這個類中定義了一個"TimeChanged"事件,注意其前面有兩個關鍵字"event"和"TimeEventHandler"        //其中event表示這是一個事件,而不是方法或屬性,TimeEventHandler則指出,誰要監聽TimeChanged事件,它就必須有一個符合TimeEventHandler(委托)的方法        public event TimeEventHandler TimeChanged;        public Clock()        {            //注意,這里的null的含義是指TimeChanged事件當前還沒有觀察者關注它            //如果某個觀察者要關注TimeChanged事件,它必須要讓這個事件知道,方法是使用操作符"+="來借助委托將其加載到事件上            TimeChanged = null;         }        //時鐘開始走動,我們的目標是每秒鐘觸發一次TimeChanged事件        public void go()        {            DateTime initi = DateTime.Now;            int h1 = initi.Hour;            int m1 = initi.Minute;            int s1 = initi.Second;            while (true)            {                DateTime now = DateTime.Now;                int h2 = now.Hour;                int m2 = now.Minute;                int s2 = now.Second;                if (s2 != s1)                {                    h1 = h2;                    m1 = m2;                    s1 = s2;                    //首先建立一個TimeEventArgs對象來保存相關參數,這里是時分秒                    TimeEventArgs args = new TimeEventArgs(h2, m2, s2);                    //注意這種寫法,這一句是用來觸發事件,事件不是類,所以不用使用"new"關鍵字,而且我們看到,這里TimeChanged的兩個參數跟我們的委托(TimeEventHandler)是一致的                    //其中第一個參數是觸發這個事件的對象,我們這里使用的是一個時鐘實例(this)                    TimeChanged(this, args);                }            }        }    }}

C委托和事件例析 - 瑞志.net - 山林客

轉載自:http://ruizhinet.blog.163.com/blog/static/99213828200901110564999/


上一篇:再談C#委托與事件

下一篇:c#之反射總結

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湛江市| 商都县| 湾仔区| 武宁县| 化隆| 交城县| 吉林市| 本溪市| 西和县| 即墨市| 元谋县| 文水县| 卢湾区| 云梦县| 桑植县| 什邡市| 英吉沙县| 高州市| 海阳市| 宜都市| 公安县| 乾安县| 沧州市| 淮滨县| 宝应县| 安远县| 东乡| 遂溪县| 彰化市| 黄石市| 峨山| 马鞍山市| 于田县| 鄂托克旗| 兴安县| 黔西县| 新营市| 紫金县| 常州市| 沧源| 象山县|