私は頭の最初のデザインパターンをやっていますが、私はCではなくJavaの例をコーディングしています。私はデコレータパターンをコーディングしましたが、修正方法を理解できないという奇妙なバグがあります。 1行目が期待どおりに動作し、記述が「Dark Roast」ですが、2行目は「Dark Roast、Mocha」ではなく「unknown beverage」に変更されます。この動作を修正するにはどうすればよいですか?C#の継承は期待通りに動作しません
主なプログラム:
beverage = new DarkRoast();
beverage = new Mocha(beverage);
beverage = new Mocha(beverage);
Console.WriteLine(beverage.Description + " $" + beverage.Cost);
デコレータコード:
namespace DecoratorPattern
{
public abstract class Beverage
{
public abstract double Cost { get; }
public string Description { get; set; } = "unknown beverage";
}
public class DarkRoast : Beverage
{
public DarkRoast()
{
Description = "Dark Roast";
}
public override double Cost => .99;
}
public abstract class CondimentDecorator : Beverage
{
public abstract string Description { get; }
}
public class Mocha : CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public override string Description
{
get { return beverage.Description + ", Mocha"; }
}
public override double Cost => .20 + beverage.Cost;
}
}
メインプログラムdコンパイルできません。 – Ian