En C #, el siguiente código es válido
interface I{
int property{get;set;}
}
Lo cual no tiene ningún sentido para mí. Esto parece romper uno de los principios más importantes de las interfaces: falta de estado (en otras palabras, sin campos). ¿La propiedad no crea un campo privado implícito? ¿No sería eso realmente malo para las interfaces?
c#
interfaces
properties
Reinstalar a Mónica
fuente
fuente

Respuestas:
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.fuente
Definir la propiedad como ha mostrado es lo mismo que definir métodos
int GetProperty()yvoid SetProperty(int i). Las propiedades son poderosas de forma abreviada en C #.Una propiedad no crea implícitamente un campo privado en C #. Esa es la implementación predeterminada de
auto-property, por ejemplopublic string MyString { get; set;}, una propiedad que define la lógica personalizada en elgetmétodo no genera un campo privado implícito.Por último, como las interfaces están relacionadas con la API pública , ¿qué importaría si la implementación de una propiedad de interfaz dependiera de un campo privado, implícito o no? Sin embargo, eso está oculto para los consumidores de la interfaz.
fuente
Las propiedades son métodos! Se agregará un campo de respaldo a la clase que implementa la interfaz (ya sea manualmente o mediante una propiedad automática).
fuente