2017-07-27 26 views
0

我是C#的新手,並且在教程打印輸出中苦苦掙扎。我的意圖是從類Rectangle繼承屬性。但是,我收到了一個錯誤,我無法解決。感謝任何提示謝謝 錯誤C57036沒有給定參數對應於 'A' 的 'Rectangle.Rectangle(雙,雙)'繼承錯誤S57036沒有任何參數

{

{ 
    //private static void Main(string[] args) 
    { 
     Rectangle myRectangle = new Rectangle(23.5, 8.6); 
     Console.WriteLine(myRectangle.getArea().ToString()); 
     Console.WriteLine(myRectangle.getParimeter().ToString()); 
     Square mySquare = new Square(15); 
     Console.WriteLine(mySquare.getArea().ToString()); 
     Console.WriteLine(mySquare.getParimeter().ToString()); 
     Console.ReadLine(); 
    } 
} 

class Rectangle 
{ 
    private double length; 
    private double width; 

    public Rectangle(double a, double b) 
    { 
     length = a; 
     width = b; 
    } 

    public double getArea() 
    { 
     return this.length * this.width; 
    } 
    public double getParimeter() 
    { 
     return 2 * (this.length + this.width); 
    } 
} 
class Square : Rectangle 
{ 
    public Square(double a)   
    { 
     length = a; 
    } 
} 

}

+0

長度是私人的,你不能繼承。如果你想繼承派生類 – Ramankingdom

+0

添加承包商no參數爲矩形: –

回答

1
所需要的形式參數

Rectangle有沒有參數沒有公共構造函數,所以你需要聲明的構造函數,並調用合適的鹼構造函數參數:

class Square : Rectangle 
{ 
    public Square(double a) : base(a, a)  
    { 

    } 
} 

這也解決了在代碼中訪問私有屬性的問題。
這應該解決編譯錯誤。

但是,就你的情況而言,如果你讓你的類變爲可變的,你可以直接進入最受歡迎的Liskov Substitution Principle違規案例。
總之,如果發生可變性,即使它在現實世界中聽起來合乎邏輯,也不能從Rectangle繼承Square。無法實現更改矩形的寬度或高度,以便在所有情況下都能正確運行。

瞭解更多關於在這裏:​​

Is deriving square from rectangle a violation of Liskov's Substitution Principle?

附:請遵循C#命名準則。方法應該有一個UpperCamelCase名稱,如GetAreaGetPeremiter。當你看到一個名字以Get開頭的方法時,你可能希望它成爲一個屬性:

class Rectangle 
{ 
    private double _length; 
    private double _width; 

    public Rectangle(double a, double b) 
    { 
     _length = a; 
     _width = b; 
    } 

    public double Area => this.length * this.width; 

    public double Perimeter => 2 * (this.length + this.width); 
}  
+0

注意,OP的類型是不可變的(即使它們不使用'readonly'),所以_don't_違反LSP,至少不是根據您引用的帖子中提供的論據。 –

+0

謝謝Yeldar你解決了錯誤,但我不明白。我正在學習我認爲寫得不正確的課程作業。當我學到更多東西時,我會保存你的文章以供參考。 – bronxsystem