Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды полиморфизма в C#
Полиморфизм — это один из ключевых принципов объектно-ориентированного программирования, позволяющий объектам разных типов отвечать на одни и те же сообщения.
1. Параметрический полиморфизм (Generics)
Позволяет создавать универсальные типы и методы, работающие с различными типами данных:
public class Repository<T> where T : class
{
public T GetById(int id) { }
public List<T> GetAll() { }
public void Add(T entity) { }
}
// Использование
var userRepo = new Repository<User>();
var productRepo = new Repository<Product>();
2. Полиморфизм подтипов (Subtyping)
Используется наследование и переопределение методов. Включает два подвида:
Статический (compile-time) — Перегрузка методов (Method Overloading):
public class Calculator
{
public int Add(int a, int b) => a + b;
public double Add(double a, double b) => a + b;
public int Add(int a, int b, int c) => a + b + c;
}
Динамический (runtime) — Переопределение методов (Method Overriding):
public abstract class Animal
{
public virtual void Speak() => Console.WriteLine("Sound");
}
public class Dog : Animal
{
public override void Speak() => Console.WriteLine("Woof!");
}
public class Cat : Animal
{
public override void Speak() => Console.WriteLine("Meow!");
}
// Использование
Animal dog = new Dog();
Animal cat = new Cat();
dog.Speak(); // Woof!
cat.Speak(); // Meow!
3. Структурный полиморфизм (Duck Typing)
В C# реализуется через интерфейсы:
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message) => Console.WriteLine(message);
}
public class FileLogger : ILogger
{
public void Log(string message) => File.AppendAllText("log.txt", message);
}
4. Ad-hoc полиморфизм
Используется для специальных операций, например операторы для разных типов.
Практическое применение
- Generic Repository Pattern — работа с любыми сущностями
- Dependency Injection — подстановка разных реализаций через интерфейсы
- Strategy Pattern — выбор алгоритма во время выполнения
- Factory Pattern — создание объектов разных типов
Полиморфизм позволяет писать гибкий, расширяемый и тестируемый код, избегая дублирования и обеспечивая принцип открытости/закрытости (Open/Closed Principle).
Похожие вопросы
- Как развивался в программировании?
- В чём разница между Transient, Scoped и Singleton?
- Приведи пример join
- Как реализуется обработка исключений?
- Назови пример значимого типа
- Что такое неуправляемые ресурсы?
- Для чего нужен Dispose?
- Приведи явный пример реализации паттерна строитель
- Что изучал в последнее время?
- Приведи пример полиморфизма
- В чём разница между Action и Func?
- Какие знаешь виды приведения типов?
- Каким типом данных является DateTime?
- Какой фреймворк использовал для тестирования?
- Расскажи о своих проектах
- Взаимодействовал ли с заказчиком напрямую?
- Сколько интерфейсов может реализовать класс?
- Что делает PATCH в REST?
- Что такое scheduler?
- В чём разница между Boxing и Unboxing?