110,534
社区成员
发帖
与我相关
我的任务
分享
//装饰器基类
public class CharactorDecoratorBase : CharactorBase
{
protected CharactorBase Charactor;
public CharactorDecoratorBase(CharactorBase charactor)
{
this.Charactor = charactor;
}
public override void Show()
{
this.Charactor.Show();
Console.WriteLine("给角色动态的换装备");
}
}
//装饰类
public class CharactorDecoratorCuirass : CharactorDecoratorBase
{
public CharactorDecoratorCuirass(CharactorBase charactor)
: base(charactor)
{
}
/// <summary>
///
/// </summary>
public override void Show()
{
base.Show();
Console.WriteLine("带上凌风胸甲");
}
}
//基础对象类
public class Mage : CharactorBase
{
public override void Show()
{
Console.WriteLine("这里是法师 Oye");
}
}
//实现程序
CharactorBase mage = new Mage();//造一个法师
mage = new CharactorDecoratorHead(mage);
mage = new CharactorDecoratorShoulder(mage); //另一个装饰类未贴代码
mage.Show();
public CharactorDecoratorBase(CharactorBase charactor)
{
this.Charactor = charactor;
}
public override void Show()
{
this.Charactor.Show();
Console.WriteLine("给角色动态的换装备");
}
由于调用了构造函数 public CharactorDecoratorBase(CharactorBase charactor)
所以最后的子类对象是你传递过去的。
接着 this.Charactor.Show();这个时候的Charactor其实是构造函数里,你传递过去的,因此base.show()的实现其实就是你传递过去的Charactor的show方法