En C #, le code suivant est valide
interface I{
int property{get;set;}
}
Ce qui n'a aucun sens pour moi. Cela semble casser l'un des principes d'interface les plus importants: le manque d'état (en d'autres termes, pas de champs). La propriété ne crée-t-elle pas un champ privé implicite? Ne serait-ce pas vraiment mauvais pour les interfaces?
c#
interfaces
properties
Rétablir Monica
la source
la source
Réponses:
Je pense que la partie déroutante est que si vous écrivez à l'
int Property { get; set; }
intérieur d'une classe, c'est une propriété automatique avec un champ de support implicite.Mais si vous écrivez exactement la même chose dans une interface, alors ce n'est pas une propriété automatique , il déclare simplement que la propriété fait partie de l'interface et que tout type qui implémente l'interface doit contenir cette propriété (en tant que propriété automatique ou non ), mais cela ne crée pas le champ de support.
Une façon de voir la différence est d'écrire
int Property { get; }
: ceci est valable dans une interface et déclare une propriété qui n'a qu'un getter, mais pas de séparateur. Mais il ne compilera pas dans une classe (sauf si vous utilisez C # 6.0), car la propriété auto doit avoir un setter.la source
Définir la propriété telle que vous l'avez montrée est la même chose que définir des méthodes
int GetProperty()
etvoid SetProperty(int i)
. Les propriétés sont puissantes en C #.Une propriété ne crée pas implicitement un champ privé en C #. Ceci est l'implémentation par défaut d'une
auto-property
, par exemplepublic string MyString { get; set;}
, mais une propriété qui définit une logique personnalisée dans laget
méthode ne génère pas de champ privé implicite.Enfin, dans la mesure où les interfaces concernent les API publiques , qu'importe si l'implémentation d'une propriété d'interface s'appuie sur un champ privé - implicite ou non? C'est caché des consommateurs de l'interface peu importe.
la source
Les propriétés sont des méthodes! Un champ de sauvegarde sera ajouté à la classe qui implémente l'interface (manuellement ou via une propriété automatique).
la source