¿Por qué C # permite propiedades en las interfaces?

43

En C #, el siguiente código es válido

interface I{
    int property{get;set;}
}

Lo que 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, no hay campos). ¿La propiedad no crea un campo privado implícito? ¿No sería eso realmente malo para las interfaces?

    
pregunta David Grinberg 23.07.2014 - 22:57

3 respuestas

57

Creo que lo confuso 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 tiene que contiene 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 un definidor. Pero no se compilará en una clase (a menos que estés usando C # 6.0), porque la propiedad automática tiene que tener un establecedor.

    
respondido por el svick 02.08.2014 - 14:01
17

Definir la propiedad como se muestra es lo mismo que definir los métodos int GetProperty() y void SetProperty(int i) . Las propiedades son poderosas y cortas en C #.

Una propiedad no crea implícitamente un campo privado en C #. Esa es la implementación predeterminada de un auto-property , por ejemplo, public string MyString { get; set;} ; sin embargo, una propiedad que define la lógica personalizada en el método get 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 se basara en un campo privado, implícito o no? Eso está oculto a los consumidores de la interfaz independientemente.

    
respondido por el NWard 23.07.2014 - 23:13
9

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).

    
respondido por el Roman Reiner 23.07.2014 - 23:15

Lea otras preguntas en las etiquetas