callback(3)--使用方法覆盖

来源:互联网 发布:免费考研的软件 编辑:程序博客网 时间:2024/05/21 09:28

针对callback(1)的需求,我们还可以使用第三种方式来解决,使用virtual的方法。只是客户端调用的时候,必须要自己重新一个car类。代码如下:

其实第一种和第二种都是has-a解决方案;这一种是 is-a的解决方案

CAR:

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace TestCS{    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 virtual  void OnExploed(string msg)        {            Console.WriteLine(msg);        }        bool isExploed=false;        public void Accelerate(int delta)        {            if (isExploed)            {                OnExploed("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 clientUseCar : Car    {        //客户端的自定义处理        public  override void OnExploed(string msg)        {            Console.Write("Client method--->");            base.OnExploed(msg);        }    }     class Program {           public static void Main(string[] args)      {          clientUseCar cc = new clientUseCar();          for (int i = 0; i < 10; i++)          {              cc.Accelerate(100);          }      }     }}