Наследование — механизм объектно-ориентированного программирования, позволяющий создавать новые классы (наследники или дочерние классы) на основе существующих (родительских или базовых классов). Наследник автоматически получает все поля, свойства, конструкторы и методы родительского класса. Он может также добавлять собственные поля, свойства, конструкторы и методы, расширяя функциональность родителя.
Что такое наследование?
Рассмотрим пример: класс Робот. Создадим класс Киллер, наследник Робот. Киллер наследует характеристики Робота, но обладает дополнительными функциями, например, стрельбой лазером. Реализация стрельбы в классе Робот нелогична, так как обычные роботы не должны стрелять лазером.
Реализация наследования
Создадим файл 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#, позволяющий создавать иерархию классов, повторно использовать код и расширять функциональность существующих классов. Понимание принципов наследования необходимо для разработки сложных и масштабируемых приложений.