簡體   English   中英

C#中的繼承問題沒有調用基類構造函數

[英]Inheritence problem in C# without calling base class constructor

我想知道為什么我沒有在下面的代碼中收到錯誤。 我在基類中沒有定義構造函數,但在派生類中定義了一個構造函數。 代碼仍按預期運行。 有人可以幫助我擺脫困惑。

class Shape
{
    public void Area()
    {
        Console.WriteLine("I am  a shape");
    }
}

class Circle : Shape
{
    double radius;
    const double pi = 3.14;

    public Circle(double rad)
    {
        radius = rad;
    }

    public new double Area()
    {
        return pi * radius * radius;
    }
}

代碼編譯完美,並給我想要的結果。 謝謝,

class Progam
{
    static void Main(string[] args)
    {
        Shape s1 = new Shape();
        s1.Area();

        Shape s2 = new Circle(10);
        s2.Area();

        Circle c1 = new Circle(4.0);
        Console.WriteLine(c1.Area());
    }
}

如果沒有定義其他構造函數,則會自動執行默認的基礎構造函數(即沒有參數)。

如果沒有顯式定義構造函數(如在您的問題中),則隱式定義默認構造函數

默認構造函數如果沒有為類提供構造函數,則默認情況下C#會創建一個實例化對象並將成員變量設置為默認值表中列出的默認值。 如果沒有為結構提供構造函數,C#依賴於隱式默認構造函數來自動將值類型的每個字段初始化為默認值表中列出的默認值。

參考: https//docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constructors

正如其他人所指出的,這里:

Shape s1 = new Shape();

你正在初始化你的Shape類。 您認為它沒有意義,因為您沒有定義構造函數,但由於您沒有它,因此它已動態生成,因此程序不會中斷。 因此,您的Shaple類執行如下:

class Shape
{
    public Shape()
    {
    }

    public void Area()
    {
        Console.WriteLine("I am  a shape");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM