Проблема наследования в C # без вызова конструктора базового класса - PullRequest
0 голосов
/ 26 октября 2018

Мне интересно, почему я не получаю сообщение об ошибке в коде ниже.Я не определил конструкторов в базовом классе, но определил один в производном классе.Тем не менее код работает как ожидалось.Может кто-нибудь любезно помочь мне избавиться от путаницы.

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());
    }
}

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Конструкторы по умолчанию Если вы не предоставляете конструктор для своего класса, C # по умолчанию создает его, который создает экземпляр объекта и присваивает переменным-членам значения по умолчанию, как указано в Таблице значений по умолчанию.Если вы не предоставляете конструктор для своей структуры, C # полагается на неявный конструктор по умолчанию для автоматической инициализации каждого поля типа значения его значением по умолчанию, как указано в таблице значений по умолчанию.

Ссылка: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constructors

0 голосов
/ 26 октября 2018

Как и все остальные, здесь:

Shape s1 = new Shape();

Вы инициализируете свой класс Shape. Вы думаете, что это не имеет смысла, потому что у вас нет определенного конструктора, но поскольку у вас его нет, он был сгенерирован динамически, поэтому программа не ломается. Таким образом, ваш класс Shaple выполняется так:

class Shape
{
    public Shape()
    {
    }

    public void Area()
    {
        Console.WriteLine("I am  a shape");
    }
}
0 голосов
/ 26 октября 2018

Базовый конструктор по умолчанию (т.е. без параметров) выполняется автоматически, если другие конструкторы не определены.

Когда вы не определяете конструктор явно (как в вашем вопросе), конструктор по умолчанию определяется неявно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...