事件如何支持泛型代理

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

。。。这样的话,可以少声明很多代理了。。。(可以多个事件对应一个代理)

还没有感觉出来有什么特别大的用途。

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<T>(object sender, T e);        public class CarEventArgs : EventArgs        {            public readonly string msg;            public CarEventArgs(string message)            {                this.msg = message;            }        }        //这里指定的类型        public event CareExploedHandle<CarEventArgs> 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<Car.CarEventArgs>(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);        }                   }}

 

原创粉丝点击