针对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);
}
}
}
}