Creo que la parte confusa es que si escribes int Property { get; set; }
dentro de una clase, entonces es una propiedad automática con un campo de respaldo implícito.
Pero si escribe exactamente lo mismo en una interfaz, entonces no es propiedad automática , simplemente declara que la propiedad es parte de la interfaz y que cualquier tipo que implemente la interfaz debe contener esa propiedad (como propiedad automática o no ), pero no crea el campo de respaldo.
Una forma de ver la diferencia es escribir int Property { get; }
: esto es válido en una interfaz y declara una propiedad que solo tiene un captador, pero no establece. Pero no se compilará en una clase (a menos que esté usando C # 6.0), porque la propiedad automática debe tener un setter.