maestro7it_education
Урок 8. Интерфейсы и абстрактные классы
Интерфейсы и абстрактные классы — это два важных инструмента в объектно-ориентированном программировании, которые помогают в проектировании гибких и расширяемых приложений.
Объявление интерфейсов
Интерфейс в C# определяет набор методов и свойств, которые класс должен реализовать.
Интерфейсы не могут содержать реализацию методов, только их сигнатуры.
Пример объявления интерфейса:
public interface IShape{ double CalculateArea(); double CalculatePerimeter();}
Класс, реализующий этот интерфейс, должен предоставить реализацию всех методов:
public class Rectangle : IShape{ public double Width { get; set; } public double Height { get; set; }
public double CalculateArea() { return Width * Height; }
public double CalculatePerimeter() { return 2 * (Width + Height); }}
Реализация абстрактных классов
Абстрактный класс — это класс, который не может быть создан напрямую и может содержать как абстрактные методы (без реализации), так и методы с реализацией.
Пример абстрактного класса:
public abstract class Shape{ public abstract double CalculateArea(); // Абстрактный метод
public virtual void Display() { Console.WriteLine("Displaying shape"); }}
Класс, унаследованный от абстрактного класса, должен реализовать все абстрактные методы:
public class Circle : Shape{ public double Radius { get; set; }
public override double CalculateArea() { return Math.PI * Radius * Radius; }}
Различие между интерфейсами и абстрактными классами
1. Множественное наследование:
Интерфейсы позволяют реализовывать множественное наследование (один класс может реализовывать несколько интерфейсов).
Абстрактные классы поддерживают только одиночное наследование (один класс может наследоваться только от одного абстрактного класса).
2. Реализация методов:
Интерфейсы не могут содержать реализацию методов до C# 8.0, где появились интерфейсы с методами по умолчанию.
В текущей версии интерфейсы по-прежнему предполагают, что методы должны быть реализованы в классах.
Абстрактные классы могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
3. Конструкторы и поля:
Интерфейсы не могут содержать конструкторы или поля.
Они могут содержать только методы, свойства, события и индексы.
Абстрактные классы могут содержать конструкторы и поля.
4. Наследование и интерфейсы:
Интерфейсы могут наследовать другие интерфейсы.
Абстрактные классы могут наследовать другие абстрактные классы или обычные классы.
5. Использование:
Интерфейсы предпочтительнее для определения контракта, который могут реализовывать различные классы.
Абстрактные классы удобны для предоставления базовой функциональности и общего кода, который может быть использован в нескольких классах.
Автор: Дуплей Максим Игоревич
Дата: 07.09.2024
Версия: 1.0