Я думаю, что запутанная часть заключается в том, что если вы пишете int Property { get; set; }
внутри класса, то это авто-свойство с неявным вспомогательным полем.
Но если вы пишете в интерфейсе одно и то же, то это не автоматическое свойство , оно просто объявляет, что свойство является частью интерфейса, и что любой тип, реализующий интерфейс, должен содержать это свойство (как автоматическое свойство или нет). ), но это не создает вспомогательное поле.
Один из способов увидеть разницу - написать int Property { get; }
: это допустимо в интерфейсе и объявляет свойство, которое имеет только геттер, но не сеттер. Но он не будет компилироваться в классе (если вы не используете C # 6.0), потому что авто-свойство должно иметь установщик.