Наследование классов в C#: полное руководство

Наследование — механизм объектно-ориентированного программирования, позволяющий создавать новые классы (наследники или дочерние классы) на основе существующих (родительских или базовых классов). Наследник автоматически получает все поля, свойства, конструкторы и методы родительского класса. Он может также добавлять собственные поля, свойства, конструкторы и методы, расширяя функциональность родителя.

Что такое наследование?

Рассмотрим пример: класс Робот. Создадим класс Киллер, наследник Робот. Киллер наследует характеристики Робота, но обладает дополнительными функциями, например, стрельбой лазером. Реализация стрельбы в классе Робот нелогична, так как обычные роботы не должны стрелять лазером.

Реализация наследования

Создадим файл Killer.cs. Скопируем директивы using и пространство имен из основного файла. Создадим класс Киллер, унаследовав его от класса Робот с помощью двоеточия:

public class Киллер : Робот
{
  // ...
}

В C# наследование происходит только от одного класса. Множественное наследование отсутствует.

Класс Киллер, даже будучи пустым, имеет доступ ко всем полям и методам класса Робот с модификаторами доступа public и protected. protected обеспечивает доступ к членам класса только внутри самого класса и его наследников. public — доступ отовсюду.

Создадим объект класса Киллер:

Killer killer = new Killer();

Код будет работать, так как Киллер наследует необходимые методы из Робот.

Добавление функциональности

В класс Киллер можно добавлять поля и методы. Например, свойство Health (здоровье) и метод ShootLaser():

public class Киллер : Робот
{
    public int Health { get; set; }

    public void ShootLaser()
    {
        Console.WriteLine("Лазер стреляет!");
    }
}

Теперь можно обращаться к Health и ShootLaser() объекта killer. Свойство Health отсутствует в классе Робот.

Конструкторы в классах-наследниках

Можно создавать конструкторы по умолчанию и с параметрами. В конструкторе с параметрами можно использовать ключевое слово base для вызова конструктора родительского класса:

public class Киллер : Робот
{
    public int Health { get; set; }

    public Киллер() : base() { } // Конструктор по умолчанию

    public Киллер(string name, double weight, Coordinate coordinates, int health) : base(name, weight, coordinates)
    {
        Health = health;
    }

    public void ShootLaser()
    {
        Console.WriteLine("Лазер стреляет!");
    }
}

Конструктор Киллер с параметрами вызывает конструктор Робот с помощью base() и устанавливает значение Health.

Вызов метода родительского класса:

base.Print();

Модификатор доступа protected

Модификатор доступа protected обеспечивает доступ к членам класса внутри самого класса и его наследников. Например:

public class Робот
{
    protected string Фамилия; // Доступно внутри Робот и его наследников
    // ...
}

К полю Фамилия можно обратиться внутри класса Робот и класса Киллер, но не напрямую извне.

Наследование — мощный инструмент в C#, позволяющий создавать иерархию классов, повторно использовать код и расширять функциональность существующих классов. Понимание принципов наследования необходимо для разработки сложных и масштабируемых приложений.

Что будем искать? Например,программа