Мог бы ты привести пример определения интерфейса в коде?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Интерфейс в C# задаёт контракт: какие члены должен реализовать класс, но не содержит бизнес-логики. Обычно ожидают увидеть, что интерфейс описывает поведение, а конкретная реализация остаётся в классе. Важно понимать, что интерфейсы помогают строить слабую связанность и упрощают тестирование.
Определение:
Интерфейс — это тип, который содержит только описание членов: методов, свойств, событий, индексаторов. Класс или структура, реализующая интерфейс, обязана предоставить реализацию всех его членов. Это удобный способ отделить “что умеет объект” от “как именно он это делает”.
Пример использования:
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
public class UserService
{
private readonly ILogger _logger;
public UserService(ILogger logger)
{
_logger = logger;
}
public void CreateUser(string name)
{
_logger.Log($"Пользователь {name} создан");
}
}
Пояснение кода:
Интерфейс ILogger задаёт один метод Log(string message).
Класс ConsoleLogger реализует этот контракт и выводит сообщение в консоль.
UserService не зависит от конкретной реализации логгера, а работает через интерфейс. Это позволяет подменять реализацию, например использовать файловый логгер или mock в тестах.
Ключевые моменты:
- Интерфейс описывает контракт, а не реализацию.
- Один класс может реализовывать несколько интерфейсов.
- Через интерфейсы удобно строить DI и писать тестируемый код.
- В коде лучше зависеть от интерфейса, а не от конкретного класса.
- Интерфейс полезен, когда нужно несколько взаимозаменяемых реализаций одного поведения.