不能声明一个正文,因为它标记为抽象

时间:2017-11-17 13:58:34

标签: c#

您好我是C#控制台应用程序的新手,我正在使用抽象和覆盖,但我在第一种方法中得到堆栈公共抽象双计算()我收到错误,它说< strong>不能声明一个正文,因为它标记为抽象请帮帮我。谢谢!

`

abstract class Cake
    {
        public string _flavor, _size;
        public int _quantity;

        public Cake(string flavor, string size, int quantity)
        {
            _flavor = flavor;
            _size = size;
            _quantity = quantity;
        }

        public abstract double Compute()
        {
            double price;
            if(_flavor == "Chocolate" && _size == "Regular")
            {
               price = 250.50;
            }
            else if (_flavor == "Chocolate" && _size == "Large")
            {
                price = 450.50;
            }
            else if (_flavor == "Strawberry" && _size == "Regular")
            {
                price = 300.50;
            }
            else
            {
                price = 500.75;
            }
            return price;
        }
    }

    class BirthdayCake:Cake
    {
        public int _numOfCandles;

        public BirthdayCake(string flavor, string size, int quantity, int numOfCandles):base(flavor,size,quantity)
        {
            _numOfCandles = numOfCandles;
        }

        public override double Compute()
        {
            return _numOfCandles * 10.00;
        }
    }`

4 个答案:

答案 0 :(得分:8)

如果您有默认实施但希望允许子类,请使用 虚拟 而不是 抽象 覆盖

答案 1 :(得分:2)

如上所述,您无法为abstract function的{​​{1}}声明正文。

你需要从abstract class创建另一个声明你想要的身体的类。

abstract class

答案 2 :(得分:1)

抽象类是可以在其中具有抽象的功能的类。

抽象函数抽象类内部的函数,该函数没有主体,它还会强制您在派生类中覆盖

这里的问题是您编写了一个带有正文的抽象函数

修复: :使用 virtual 关键字代替抽象虚拟不会强迫您覆盖该功能,并且您也可以在基类中包含主体。  (注意:如果您使用的是虚拟功能而不是抽象功能,请从您的班级中也删除抽象关键字。)

答案 3 :(得分:0)

抽象方法在同一类中没有实现,因此方法定义后跟分号而不是常规方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚拟方法时,抽象类可以使用抽象方法覆盖虚拟方法。例如:

  

抽象方法在同一个类中没有实现-示例代码

public abstract class A
{
public abstract void DoWork(int i);
public String DoWork(String str)
{
  return str;
}

}
public class B:A
{
    public virtual void DoWork(int i)
    {
        // here implementation.
    }
}