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 elget
mé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