C# 无法声明主体,因为它被标记为抽象

C# 无法声明主体,因为它被标记为抽象,c#,C#,您好,我是C#console应用程序的新手,我正在使用abstract和override,但我在public abstract double Compute()中的第一个方法中得到了stack。我遇到一个错误,它说无法声明一个主体,因为它被标记为abstract,请帮助我。谢谢大家! ` 如果您有默认实现,但希望允许子类重写如上所述,您不能为抽象类的抽象函数声明主体,请使用virtual而不是abstract 您需要从抽象类创建另一个类herited来声明所需的主体 abstract class

您好,我是C#console应用程序的新手,我正在使用abstract和override,但我在public abstract double Compute()中的第一个方法中得到了stack。我遇到一个错误,它说无法声明一个主体,因为它被标记为abstract,请帮助我。谢谢大家!

`


如果您有默认实现,但希望允许子类重写

如上所述,您不能为
抽象类的
抽象函数
声明主体,请使用virtual而不是abstract

您需要从
抽象类
创建另一个类herited来声明所需的主体

abstract class Cake
{
    public string _flavor, _size;
    public int _quantity;
    abstract public double Compute();
}

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()
    {
        //does your stuff
    }
}

抽象类是一个类,其中可以包含抽象的函数

抽象函数抽象类中没有主体的函数,它还强制您在派生类中重写它

这里的问题是您编写了一个具有主体的抽象函数

修复:使用virtual关键字而不是abstractvirtual不要强制您重写函数,您也可以在基类中拥有一个主体。
(注意:如果您使用的是虚拟函数而不是抽象函数,请也从类中删除抽象关键字。)

抽象方法在同一类中没有实现,因此方法定义后面是分号,而不是普通的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚拟方法时,抽象类可以用抽象方法重写虚拟方法。e、 g:


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


如果您有默认实现,但希望允许子类重写,请使用virtual而不是abstract。如果在抽象类中声明抽象函数,则不应在同一类中声明body。它必须实现它的派生类。根据这个例子,OP实际上更可能希望使用虚拟类而不是抽象类。@EdPlunkett Edited.Abhimanue Sanjay。抽象类不必至少有一个抽象函数。抽象类可以为空。SunilDhappadhule,谢谢。我不确定。但是空的抽象类有什么用呢?Abhimanue Sanjay,没有用,空的抽象类除了可以扩展类之外,与接口非常等效
abstract class Cake
{
    public string _flavor, _size;
    public int _quantity;
    abstract public double Compute();
}

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()
    {
        //does your stuff
    }
}
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.
    }
}