2013-04-02 23 views
0

C#Inhertance。我試圖繼承類sqaure的類四邊形。我無法弄清楚,我得到了以下錯誤,我不知道它是什麼意思。字段square.p1永遠不會分配給它,並始終將其默認值爲空?c#字段永遠不會分配給它,並且始終將其默認值爲空?

using System; 

    class testquadrilaterals 
    { 
     static void Main() 
{ 
    quadrilateral obj1 = new quadrilateral(1.1, 1.2, 6.6, 2.8, 6.2, 9.9, 2.2, 7.4); 
    obj1.printcoordinates(); 
    Console.WriteLine("\n"); 
    square obj2 = new square(4.0, 0.0, 8.0, 0.0, 8.0, 4.0, 4.0, 4.0); 
    obj2.printsquare(); 

    Console.ReadLine(); 
} 
    } 

    class point 
    { 
     private double x; 
private double y; 

public point(double x_coord, double y_coord) 
{ 
    x = x_coord; 
    y = y_coord; 
} 

public double X { get { return x; } set { x = value; } } 
public double Y { get { return y; } set { y = value; } } 

public override string ToString() 
{ 
    return ("(" + X + ", " + Y + ")"); 
} 
    } 

    class quadrilateral 
    { 
point p1, p2, p3, p4; 

public quadrilateral(double x1, double y1, double x2, double y2, 
    double x3, double y3, double x4, double y4) 
{ 
    p1 = new point(x1, y1); 
    p2 = new point(x2, y2); 
    p3 = new point(x3, y3); 
    p4 = new point(x4, y4); 
} 

public point P1 { get { return p1; } set { p1 = value; } } 
public point P2 { get { return p2; } set { p2 = value; } } 
public point P3 { get { return p3; } set { p3 = value; } } 
public point P4 { get { return p4; } set { p4 = value; } } 

public void printcoordinates() 
{ 
    Console.WriteLine("Coordinates of Quadrilateral: \n" + p1.ToString() + " " + p2.ToString() + " " + p3.ToString() + " " + p4.ToString() + " "); 
} 
    } 


    class square : quadrilateral 
    { 
point p1, p2, p3, p4; 

public square(double x1, double y1, double x2, double y2, 
    double x3, double y3, double x4, double y4) : base (x1, y1, x2, y2, x3, y3, x4, y4) 
{ } 

public void printsquare() 
{ 
    Console.WriteLine("Coordinates of Square: \n" + p1.ToString() + " " + p2.ToString() + " " + p3.ToString() + " " + p4.ToString() + " "); 
    Console.WriteLine("Area: " + area()); 
    // Console.WriteLine("Sides: " + sides()); 
} 

public double area() 
{ 

    return Math.Abs(p1.X - p2.X) * Math.Abs(p1.Y - p3.Y); 
} 
// public double sides() { } 

}

回答

0

如果從quadrilaterial你不需要在方再次定義變量P1/P2/P3/P4繼承,你會從基類繼承它們。

2

在這種情況下,類square定義4個字段,它不落:P1,P2,P3和P4

class square : quadrilateral { 
    point p1, p2, p3, p4; 

    ... 
} 

這些字段是私有和從未設置因此它們基本上是無用的原樣。 C#編譯器提醒您這一點,因爲這通常表示有錯誤。

在這種情況下,您可能希望square只使用quadrilateral中的值。這些字段具有相同的名稱和類型,並且這兩種類型之間存在繼承關係。如果是這樣的話,你應該刪除字段square,改變無障礙protectedquadrilateral

class quadrilateral { 
    protected point p1, p2, p3, p4; 
    ... 
} 

這將使square訪問值

+0

謝謝你,我現在明白了。 – user1905501

0

在廣場::區域()時,P1S和P2S指的是在方形課程中定義的那些,而不是四邊形課程中的那些。你有square :: p1,square :: p2等等,quadrilateral :: p1,quadrilateral :: p2等。p1s和p2s不會被賦值。要讓您的方形課程使用四邊形課程的p1和p2,請勿將它們重新定義爲方形。

相關問題