2011-12-26 8 views
1

私のクラスEllipseは私のクラスShapeから継承する必要がありますが、私は、このエラーメッセージが出ます:1「ConsoleApplication3.Ellipse」は継承された抽象メンバー「ConsoleApplication3.Shape.Perimeterを実装していませんオーバーライドプロパティが動作しません

エラー.get '

また、AreaのプロパティがEllipseに隠れているというエラーメッセージが表示されます。

誰でも教えてください。

マイ形状クラスは、次のようになります。

public abstract class Shape 
{ 
    //Protected constructor 
    protected Shape(double length, double width) 
    { 
     _length = length; 
     _width = width; 
    } 


    private double _length; 
    private double _width; 

    public abstract double Area 
    { 
     get; 
    } 

そして、私の楕円のクラスがある:

あなたは、例えば、あなたの楕円のクラスのエリアと境界の性質上 override修飾子を使用する必要が
class Ellipse : Shape 
{ 
    //Constructor 
    public Ellipse(double length, double width) 
     :base(length, width) 
    { 

    } 

    //Egenskaper 
    public override double Area 
    { 
     get 
     { 
      return Math.PI * Length * Width; 
     } 
    } 
} 
+1

両方のクラスのコードを表示できますか? –

+0

サンプルコードをコンソールアプリケーションに貼り付け、長さと幅のアクセサを追加して、うまくコンパイルします。サンプルコードと実際のコードを比較すると、答えが得られます。 –

答えて

5

public override double Area { get; } 

public override double Perimeter { get; } 

Visual Studioであなたのためのヒントは、テキスト内の(あなたの楕円のクラスで)「形」をカーソルを置き、はCtrl + を押してください。。これは、あなたが実装していないメンバーのためのスタブを追加する必要があります

+0

私はそれをしましたが、それでも仕事はしません。 公共オーバーライドダブルエリア { { リターンにMath.PI *長さ*幅を取得します。 } } –

1

これはあなたが宣言していないので、後で何かあなたのEllipseクラスのどこにコンパイルエラーが発生する可能性がありますので、基本クラスShapeの_lengthプロパティと_widthプロパティの可視性。

public abstract class Shape 
{ 
    //Protected konstruktor 
    protected Shape(double length, double width) 
    { 
    _length = length; 
    _width = width; 
    } 

    // have these variables protected since you instantiate you child through the parent class.  

    protected double _length; 
    protected double _width; 

    public abstract double Area 
    { 
    get; 
    } 
} 
class Ellipse : Shape 
{ 
    //Konstruktor 
    public Ellipse(double length, double width) 
    : base(length, width) 
    { 

    } 

    //Egenskaper 
    public override double Area 
    { 
    get 
    { 
     // use the variable inherited since you only call the base class constructor. 
     return Math.PI * _length * _width; 
    } 
    } 
} 
+0

「あなたのEllipseクラスのどこにLength、Widthを宣言していないのですか」とはどういう意味ですか?あなたの答えは私のソリューションとまったく同じです。 –

+0

@HerrNilssonは2つのことに注意することができます。1)protected double _length;保護されたdouble _width; Shapeクラス内 –

+0

2)パブリックオーバーライドdoubleエリア { get { return Math.PI * _length * _width; } } –

関連する問題