Ответ
Да, опыт есть. Интерфейсы в C# — это ключевой инструмент для определения контрактов, которые классы обязаны реализовать. Они обеспечивают полиморфизм и слабую связанность, что критически важно для создания тестируемого и поддерживаемого кода.
Пример базового интерфейса и его реализаций:
// Контракт для логирования
public interface ILogger
{
void Log(string message);
}
// Реализация для консоли
public class ConsoleLogger : ILogger
{
public void Log(string message) => Console.WriteLine($"[LOG] {DateTime.Now}: {message}");
}
// Реализация для файла
public class FileLogger : ILogger
{
private readonly string _filePath;
public FileLogger(string filePath) => _filePath = filePath;
public void Log(string message) => File.AppendAllText(_filePath, $"{DateTime.Now}: {message}n");
}
Практическое использование и преимущества:
- Внедрение зависимостей (DI): Позволяет легко подменять реализации.
public class OrderProcessor { private readonly ILogger _logger; // Внедряем зависимость через конструктор public OrderProcessor(ILogger logger) => _logger = logger; public void ProcessOrder() => _logger.Log("Order processed."); } // В контейнере DI можно зарегистрировать ILogger как FileLogger или ConsoleLogger. - Множественное наследование: Класс может реализовывать несколько интерфейсов.
- Реализации по умолчанию (C# 8.0+): Интерфейсы могут содержать методы с реализацией, что помогает в эволюции API без ломающих изменений.
- Основы паттернов: Интерфейсы лежат в основе многих паттернов проектирования (Strategy, Adapter, Factory и др.).