您好我是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;
}
}`
答案 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.
}
}