Ответ
Полиморфизм («много форм») — это принцип ООП, позволяющий использовать объекты разных классов через единый интерфейс (базовый класс или интерфейс), при этом конкретное поведение определяется реальным типом объекта во время выполнения.
Основные формы в C#:
-
Полиморфизм подтипов (наследование и переопределение): Базовый класс объявляет виртуальный метод, производные классы предоставляют свою реализацию.
public class Document { public virtual void Print() => Console.WriteLine("Печать базового документа."); } public class PdfDocument : Document { public override void Print() => Console.WriteLine("Отправка PDF на виртуальный принтер."); } public class WordDocument : Document { public override void Print() => Console.WriteLine("Запуск MS Word для печати."); } // Использование: один интерфейс, разное поведение List<Document> docs = new() { new Document(), new PdfDocument(), new WordDocument() }; foreach (var doc in docs) { doc.Print(); // Вызовется своя реализация для каждого типа } -
Полиморфизм через интерфейсы: Разные, не связанные наследованием классы, реализуют один интерфейс.
public interface ILogger { void Log(string message); } public class FileLogger : ILogger { public void Log(string message) => File.AppendAllText("log.txt", message); } public class ConsoleLogger : ILogger { public void Log(string message) => Console.WriteLine($"[LOG] {message}"); } // Метод работает с любым ILogger public void ProcessOrder(ILogger logger) { logger.Log("Начало обработки заказа."); // ... логика } -
Перегрузка методов (Ad-hoc полиморфизм): Несколько методов с одним именем, но разными параметрами.
public class Calculator { public int Add(int a, int b) => a + b; public double Add(double a, double b) => a + b; public string Add(string a, string b) => a + b; // конкатенация }
Выгода: Полиморфизм уменьшает связанность кода. Вы можете добавлять новые типы (например, ExcelDocument), не изменяя существующий код, который работает с базовым типом Document.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶