【问题标题】:Error: must have a body because it is not marked abstract extern or partial错误:必须有一个主体,因为它没有标记为抽象外部或部分
【发布时间】:2017-11-16 23:16:42
【问题描述】:

我有以下代码,但我不断收到错误必须有一个正文,因为它没有标记为抽象外部或部分。

public interface Shape{
    int GetArea();
}
public class shape:Shape{
    int height;
    int width;
    int radius;  
    int GetArea();

}
class Rectangle :Shape{
    int height;
    int width;
    Rectangle(int height,int width){
        this.height = height;
        this.width = width;
    }
    int GetArea(){
        int area = height*width;
        return area;
    }
}

【问题讨论】:

  • GetArea 类中的 GetArea 方法没有方法主体,但它没有标记为抽象(您的类也没有)。所有非抽象方法都必须有方法体。
  • 能否给代码

标签: c# interface abstract-class abstract


【解决方案1】:

你应该像这样实现Shape接口(不要忘记实现中的public关键字):

public class shape : Shape
{
    public int GetArea()
    {
        return 0;//Return an int value
    }

}
class Rectangle : Shape
{
    public int GetArea()
    {
        int area = height * width;
        return area;
    }
}

【讨论】:

    【解决方案2】:

    试试这个:

    //1. Change interface name from Shape to IShape; to 
    //   be in line with standards and to avoid being 
    //   too close to your original class name, `shape`
    
    public interface IShape {
        int GetArea();
    }
    
    //2. Change your class from `shape` to `Shape`; again 
    //   to be in line with standards.  Also given we 
    //   changed to IShape above, amend the interface name
    //   here also.
    
    //3. Add keyword `abstract`.  Since we don't have a body
    //   (i.e. a definition) for the GetArea method, we can't
    //   instantiate it, so it has to be abstract 
    public abstract class Shape:IShape {
        //4. Make our fields protected; since we can't instantiate 
        //   this class there's no point having them here unless 
        //   they're made visible to any classes which inherit from 
        //   this class.
        protected int height;
        protected int width;
        protected int radius;  
        //5. Since GetArea is required (to implement interface IShape)
        //   but has no body defined, make it abstract.
        public abstract int GetArea();
    }
    
    //6. We changed the class from `shape` to `Shape`, so change here also.
    //7. You probably also want to make this class & it's constructor public
    //   though I can't guarentee that (hence commented out)
    /* public */ class Rectangle : Shape {
        /* public */ Rectangle(int height,int width){
            this.height = height;
            this.width = width;
        }
        //8. To implement the interface this method needs to be made public.
        //9. You also need to use the `override` keyword to say that this 
        //   replaces the abstract method on the base class (`Shape`) 
        public override int GetArea() {
            int area = height * width;
            return area;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多