Ответ
В C# интерфейс (interface) является ссылочным типом (reference type). Это означает, что переменная, объявленная с типом интерфейса, хранит не сами данные, а ссылку на объект в управляемой куче (heap), который этот интерфейс реализует.
Ключевые характеристики интерфейса как типа:
- Определяет контракт: Содержит только сигнатуры методов, свойств, событий или индексаторов (до C# 8.0).
- Не может быть инстанциирован: Нельзя создать объект напрямую через
new IMyInterface(). - Позволяет полиморфизм: Объект любого класса, реализующего интерфейс, может быть присвоен переменной этого интерфейсного типа.
- Поддержка реализации по умолчанию: Начиная с C# 8.0, интерфейсы могут содержать методы с реализацией по умолчанию (
default interface methods).
Почему это ссылочный тип? Это позволяет работать с разнородными объектами через единый контракт, обеспечивая гибкость и слабую связанность в архитектуре.
Пример:
// Интерфейс как ссылочный тип
public interface ILogger
{
void Log(string message);
// Метод с реализацией по умолчанию (C# 8.0+)
void LogError(string error) => Log($"ERROR: {error}");
}
// Класс, реализующий интерфейс
public class FileLogger : ILogger
{
public void Log(string message)
{
File.AppendAllText("log.txt", message + "n");
}
}
// Использование
ILogger logger = new FileLogger(); // Переменная типа интерфейса хранит ссылку на объект FileLogger
logger.Log("Application started"); // Вызов метода через интерфейс
logger.LogError("File not found"); // Вызов метода по умолчанию