Какие знаешь виды полиморфизма?
Комментарии (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).