2016-11-23 74 views
0

我無法使用基類構造函數將值分配給子類構造函數。你能幫我理解這一點嗎?初始化子類構造函數:繼承

代碼:

class Polygon 
{ 
    public int NumSides; 

    public Polygon (int numsides) 
    { 
     this.NumSides = 4; 
    } 
} 

class Square : Polygon 
{ 
    public readonly int SideLength; 
    public Square(int SideLength) : base(SideLength) 
    { 
     this.SideLength = NumSides; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Polygon p = new Polygon(1); 
     Console.WriteLine("Polygon Class {0}", p.NumSides); 
     Square s = new Square(1); 
     Console.WriteLine("SquareClass {0}", s.SideLength); 
     Console.ReadLine(); 
    } 
} 

結果:多邊形類:4,SquareClass:0

如果我修改於:

class Square : Polygon 
{ 
    public readonly int SideLength; 
    public Square(int SideLength) : base(SideLength) 
    { 
     this.SideLength = NumSides; 
    } 
} 

它的工作原理。

+0

你確定你使用這段代碼得到了這個結果嗎? – user3185569

+3

是不是你的修改代碼與原始代碼相同? – stuartd

+1

輸出實際上是:多邊形類4,SquareClass 4 – stuartd

回答

0

我認爲你在混合NumSides(部分Polygon基類)和SideLength(只在Square中)。

我猜你想這些類是:

class Polygon 
{ 
    public int NumSides; 

    public Polygon(int numsides) 
    { 
     this.NumSides = numsides; 
    } 
} 

class Square : Polygon 
{ 
    public readonly int SideLength; 
    public Square(int SideLength) : base(4) 
    { 
     this.SideLength = SideLength; 
    } 
} 

即分配在多邊形構造函數和SideLength在廣場構造即numSides - 但通過4即numSides在廣場的基礎構造。

希望有所幫助。

+0

是的,你說得對,我終於開始工作了,你現在在:public readonly int sideLength; public square(int sideLength):base(4) this.Sid​​eLength = sideLength; } } –