maestro7it_education

Форк
0

README.md

Урок 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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.