【问题标题】:Error message: does not implement inherited abstract member错误信息:没有实现继承的抽象成员
【发布时间】:2017-09-22 12:27:32
【问题描述】:

小心,因为我是 C# 的新手!所以我有一个常规类Cube,它继承自抽象类Shape3D,后者又继承自抽象类Shape2D

Shape2D提供两个抽象属性:Area & PerimeterCube 构造函数调用基类构造函数,并设置新对象的长度、高度和宽度。

由于某种原因,我从Cube 收到此错误:

Error: 'Cube' does not implement inherited abstract member 'Shape2D.Area.get'
Error: 'Cube' does not implement inherited abstract member 'Shape2D.Perimeter.get'

Shape2D 的外观是这样的:

abstract class Shape2D : Shape
{
    private double _length, _width;
    public double Length{..}
    public double Width{..}

    public abstract double Area{ get; }

    public abstract double Perimeter{ get; }

    protected Shape2D(ShapeType shapeType, double length, double width) 
    : base(shapeType)
    {
        _length = length;
        _width = width;
    }

    public override string ToString(){..}
}

Shape 3D:

abstract class Shape3D : Shape2D
{
    protected Shape2D _baseShape;
    private double _height;

    public double Height{..}
    public virtual double MantelArea{..}
    public virtual double TotalSurfaceArea{..}
    public virtual double Volume{..}

    protected Shape3D(ShapeType shapeType, Shape2D baseShape, double height)
    : base(shapeType, height, height)
    {
        _baseShape = baseShape;
        _height = height;
    }

    public override string ToString(){..}
}

Cube:

class Cube : Shape3D --> This returns inherited error.
{
    ...
}

我用谷歌搜索了我的**,但没有发现任何有用的东西。为什么我的普通类不从抽象类继承抽象成员?谁能指导一下?

【问题讨论】:

    标签: c# inheritance abstract-class abstract


    【解决方案1】:

    由于您的 2d 类是具有两个抽象属性的抽象类,因此您需要在具体类中实现它们,如下所示。

    快速编辑以回答您的问题 - 属性是抽象的,这就是为什么它似乎没有“继承”它们。在进行具体实现时,您需要实现任何抽象属性。如果您认为应该从 2dShape 上的抽象更改这些,它们可能应该保持抽象,因为不同的形状将有不同的公式来计算基于长度和宽度的周长和面积。

    class Cube : Shape3D
    {
       public override double Area{ get; }
    
        public override double Perimeter{ get; }
    
    }
    

    【讨论】:

    • 嗯,是的,这样可以避免错误。我正在遵循一个实现,其中多维数据集类不涉及区域和周长的两个覆盖方法,但我看不出还有什么方法可以工作!在我下面的例子中,立方体类只有一个构造方法..
    • 如果您提供示例的链接,我可以看一下。
    • 我确实按照图片... Cube 继承自 shape,而不是 2d shape。现在我考虑一下,周长和面积对于立方体没有意义。体积和表面积对于立方体来说是有意义的。
    • 是的,没错。那么为什么继承面积和周长会给我带来麻烦呢?立方体将从 Rectangle 类继承特征,所以我猜周长和面积对立方体有某种意义
    • 因为你正在这样做:abstract class Shape3D : Shape2D 当你应该这样做时:abstract class Shape3D : Shape
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多