Sobes.tech
Назад к вопросам
Junior — Middle
65

Мог бы ты привести пример определения интерфейса в коде?

Ответ от нейросети

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 и писать тестируемый код.
  • В коде лучше зависеть от интерфейса, а не от конкретного класса.
  • Интерфейс полезен, когда нужно несколько взаимозаменяемых реализаций одного поведения.