2016-11-23 35 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; } } –