Penso che la parte confusa sia che se scrivi int Property { get; set; }
all'interno di una classe, allora si tratta di una proprietà automatica con campo di applicazione implicito.
Ma se scrivi esattamente la stessa cosa in un'interfaccia, allora non è auto-property , semplicemente dichiara che la proprietà è parte dell'interfaccia e che qualsiasi tipo che implementa l'interfaccia deve contiene quella proprietà (come proprietà auto o meno), ma non crea il campo di supporto.
Un modo per vedere la differenza è scrivere int Property { get; }
: questo è valido in un'interfaccia e dichiara una proprietà che ha solo un getter, ma nessun setter. Ma non verrà compilato in una classe (a meno che tu non stia utilizzando C # 6.0), perché la proprietà automatica deve avere un setter.