public abstract class Beverage
    {
        protected string description = "Unknown Beverage";        public string GetDescription()
        {
            return description;
        }        public abstract double Cost();
    } public abstract class CondimentDecorator:Beverage
    {
        protected Beverage Beverage;
        public abstract string GetDescription();
    } public class Mocha:CondimentDecorator
    {
        public Mocha(Beverage beverage)
        {
            this.Beverage = beverage;
        }        public override string GetDescription()
        {
            return Beverage.GetDescription() + ",Mocha";
        }        public override double Cost()
        {
            return .20 + Beverage.Cost();
        }
    }
Beverage beverage2=new HouseBlend();
beverage2=new Mocha(beverage2);
beverage2.GetDescription();

解决方案 »

  1.   

    public virtual?? string GetDescription()
      {
      return description;
      }没有用virtual,那就有两个GetDescription(),要竞争上岗啦
      

  2.   

    Beverage beverage2=new HouseBlend();这个类呢?
      

  3.   


    回去好好看看基础书,抽象类里能不能有方法,可不可以加virtual。
      

  4.   


    public abstract class Beverage
      {
      protected string description = "Unknown Beverage";  public string GetDescription()  //基类里面有了此方法
      {
      return description;
      }  public abstract double Cost();
      } public abstract class CondimentDecorator:Beverage
      {
      protected Beverage Beverage;
      public abstract string GetDescription();  //继承的子类里面有同名的方法,而且没有标记override,这时就要根据变量实例的定义来决定执行哪个方法了。
      }
      

  5.   

    对啊   但是1楼可以不要virtual
      

  6.   


    使用virtual关键字后,子类的实现实际上实现的是对基类GetDescription的重写,而不是对中间的抽象方法重写(不过估计这样编译不过去)。