Пример ответа
Коротко: Полиморфизм в ООП — это возможность объектов разных классов обрабатываться через общий интерфейс или базовый класс, что позволяет мне писать более гибкий и переиспользуемый код, особенно в C#.
Ключевые идеи:
- Полиморфизм позволяет вызывать методы производных классов через ссылку на базовый класс, обеспечивая единый интерфейс для разных реализаций.
- В C# полиморфизм реализуется через наследование и виртуальные методы с ключевым словом 'override', а также через интерфейсы.
- Это упрощает расширение кода, так как новые классы можно добавлять без изменения существующего кода, работающего с базовым типом.
Пример: Например, в моём проекте у меня был базовый класс 'PaymentProcessor' с виртуальным методом 'ProcessPayment'. Классы 'CreditCardProcessor' и 'PayPalProcessor' переопределяли этот метод, и я мог вызывать 'ProcessPayment' через ссылку на 'PaymentProcessor', не зная конкретной реализации.
Пример полиморфизма в C# с использованием наследования и виртуальных методов
csharp
using System;
public abstract class Shape
{
public abstract double Area();
}
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
public override double Area()
{
return Math.PI * Radius * Radius;
}
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
public override double Area()
{
return Width * Height;
}
}
class Program
{
static void Main()
{
Shape[] shapes = new Shape[]
{
new Circle(5.0),
new Rectangle(4.0, 6.0)
};
foreach (var shape in shapes)
{
Console.WriteLine($"Area: {shape.Area()}");
}
}
}
Вопросы для интервьюера:
- Как полиморфизм связан с принципами SOLID? — Полиморфизм напрямую поддерживает принцип открытости/закрытости (OCP), позволяя расширять поведение через новые классы без изменения существующего кода.
- Какие есть типы полиморфизма в C#? — В C# я использую полиморфизм через наследование (виртуальные методы) и интерфейсы, а также параметрический полиморфизм с обобщёнными типами (generics).
Практический совет (на неделю):
- При проектировании классов в C# используйте интерфейсы или абстрактные классы для определения общего поведения, чтобы легко добавлять новые реализации.
- Тестируйте полиморфный код, убедившись, что все производные классы корректно переопределяют методы и не нарушают контракт базового типа.
C# Backend
Общий
33%