Определить ошибки в реализации классов C#

Код не компилируется: sealed запрещает наследовать Animal, private-поле недоступно Dog, а конструктор Dog закрыт для Main. На уровне файла class также не может быть private.

Короткий ответ

Что ответить на собеседовании

Код не компилируется: sealed запрещает наследовать Animal, private-поле недоступно Dog, а конструктор Dog закрыт для Main. На уровне файла class также не может быть private.

Подробный разбор

Ответ с пояснениями

Условие

Какие проблемы присутствуют в приведённом коде? Сможет ли он успешно скомпилироваться? Если нет — объясните причины.

private sealed class Animal
    {
        private int Velocity = 150;

        void Run (int distance)
        {
            Velocity += distance;
        }
}

class Dog: Animal
    {
        Dog()
        {
            Velocity = 150;
        }

        void Run(int distance)
        {

        }
    }

public class Main
        {
            public Main()
        {
            var c = new Dog();
        }
}

Ответ

Код не компилируется: sealed запрещает наследовать Animal, private-поле недоступно Dog, а конструктор Dog закрыт для Main. На уровне файла class также не может быть private.

Уберите sealed, если наследование действительно нужно. Поле Velocity лучше оставить закрытым, предоставив производному классу защищённое свойство или методы. Сделайте конструктор Dog публичным либо создавайте объект через доступную фабрику.

Метод Run в Animal без модификатора закрытый и не virtual, поэтому одноимённый Run в Dog его не переопределяет. Для полиморфизма нужны protected/public virtual в базе и override в наследнике. Само совпадение имён методов ещё не даёт виртуальную диспетчеризацию.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее