C# Наследование: Урок по созданию базовых и производных классов

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

Создание базового класса

Создадим класс Animal, представляющий животное. Добавим свойство Name:

public class Animal
{
    public string Name { get; set; }
}

Создание наследника

Создадим класс Dog, наследник класса Animal. Animal описывает общие характеристики животных (имя, скорость, вес и т.д.), которые наследуются Dog.

Для наследования используем двоеточие:

public class Dog : Animal

Теперь Dog наследует все из Animal. Можно создать объект Dog и обратиться к свойству Name унаследованному от Animal:

Dog tom = new Dog();
tom.Name = "Tom";

Это работает, поскольку Dog унаследовал поля и методы базового класса.

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

Модификаторы доступа определяют видимость членов класса:

  • public: Видно везде.
  • private: Видно только внутри класса.
  • protected: Видно внутри класса и его наследников.

Например, если поле объявлено как private, наследник не сможет к нему обратиться. protected обеспечивает доступ наследникам. Для доступа из наследников обычно используется public.

public class Animal
{
    public string Name { get; set; }
    protected int Speed { get; set; } // Доступно в Animal и Dog
    private int Weight { get; set; } // Доступно только в Animal

    public void SomeMethod()
    {
        Console.WriteLine(Name); // Доступно
        Console.WriteLine(Speed); // Доступно
        Console.WriteLine(Weight); // Доступно
    }
}

Наследование конструкторов

Конструкторы задают начальные значения при создании объекта. Можно наследовать конструкторы базового класса.

Создадим конструктор для Dog, принимающий скорость и имя:

public class Dog : Animal
{
    public int Speed { get; set; }

    public Dog(int speed, string name) : base(name)
    {
        Speed = speed;
    }
}

base(name) вызывает базовый конструктор Animal, передавая ему name.

Dog jerry = new Dog(23, "Jerry");
Console.WriteLine(jerry.Speed); // Выведет 23
Console.WriteLine(jerry.Name); // Выведет Jerry

Конструкторы также должны иметь модификаторы доступа (public).

Наследование методов

Добавим метод в базовый класс и вызовем его из наследника:

public class Animal
{
    // ...
    public void PrintName()
    {
        Console.WriteLine(Name);
    }
}

public class Dog : Animal
{
    // ...
}

jerry.PrintName(); // Выведет "Jerry"

Dog наследует метод PrintName из Animal.

Наследование — мощный инструмент ООП, позволяющий создавать иерархию классов и повторно использовать код. Правильное использование модификаторов доступа и наследование конструкторов ведут к чистому и эффективному коду.

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