Почему нельзя писать поле в интерфейсе?

В C# нельзя определить поле (field) в интерфейсе, потому что интерфейс представляет собой абстрактное описание поведения, а не состояния. Интерфейс определяет набор методов, свойств и событий, которые должны быть реализованы классами, которые интерфейс используют.

Поля, с другой стороны, представляют собой переменные, которые хранят данные внутри объекта. Они обычно предназначены для хранения состояния объекта и доступа к нему. Однако интерфейсы не имеют возможности хранить состояние объекта, поскольку они не реализуют конкретную функциональность, а только описывают ее.

Вместо полей, интерфейсы определяют свойства (properties), которые могут быть использованы для получения или установки значений состояния объекта. Свойства позволяют устанавливать и получать значения, но скрывают способ, которым эти значения хранятся и обрабатываются внутри класса.

Таким образом, в языке C# поля могут быть определены только внутри классов, структур и перечислений. Если вы хотите предоставить доступ к состоянию объекта через интерфейс, вы можете использовать свойства, которые предоставляют аналогичную функциональность полям, но с дополнительной гибкостью и контролем доступа к данным.