.Net的标准事件模型

来源:互联网 发布:工厂生产流程软件 编辑:程序博客网 时间:2024/05/02 07:59

.NET的控件都采用一个标准的模型,或者说代理都是同样的形式:

事件:public event xxx(object sender, EventArgs e)

代理:public delegate void xxx(objcet sender ,EventArgs e)。

改装了一下Car和客户端的代码:

CAR:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace TestCS{    public class Car    {        #region Properties and variables        private int maxSpeed = 500;        private string petName;        private int currentSpeed;        public string PetName        {            get { return petName; }            set { petName = value; }        }        public int CurrentSpeed        {            get { return currentSpeed; }            set { currentSpeed = value; }        }        #endregion        public delegate void CareExploedHandle(object sender, CarEventArgs e);        public class CarEventArgs : EventArgs        {            public readonly string msg;            public CarEventArgs(string message)            {                this.msg = message;            }        }        public event CareExploedHandle Exploed;        bool isExploed=false;        public void Accelerate(int delta)        {            if (isExploed)            {                if (Exploed != null)                    Exploed(this, new CarEventArgs("Car is exploed!"));            }            else            {                currentSpeed += delta;                Console.WriteLine("Current Speed is {0}", currentSpeed.ToString());                if (maxSpeed< currentSpeed)                    isExploed = true;            }                    }    }}

客户端:

using System;using System.Collections;using System.Linq;using System.Text;using System.Collections.Generic;using System.Runtime.Serialization;namespace TestCS{         class Program    {        public static void Main(string[] args)        {            Car c = new Car();            c.Exploed += new Car.CareExploedHandle(c_Exploed);            for (int i = 0; i < 10; i++)            {                c.Accelerate(100);            }                    }                static void c_Exploed(object sender, Car.CarEventArgs e)        {            Console.WriteLine(e.msg);        }    }}