52 votes

Propriétés automatiques C #

Je suis un peu confus sur le point des propriétés automatiques en C #, par exemple

 public string Forename{ get; set; }
 

Je comprends que vous enregistrez le code sans avoir à déclarer une variable privée, mais quel est l'intérêt d'une propriété lorsque vous n'utilisez aucune logique get ou set? Pourquoi ne pas simplement utiliser

 public string Forename; 
 

Je ne suis pas sûr de la différence entre ces deux instructions. J'ai toujours pensé que vous utilisiez des propriétés si vous vouliez une logique get / set supplémentaire.

118voto

MatthewMartin Points 12385

Les propriétés peuvent avoir du code mis en elles sans rompre le contrat, les champs ne peuvent pas avoir du code en elles sans les changer en propriétés (et en cassant l'interface). Les propriétés peuvent être en lecture seule ou en écriture uniquement, les champs ne peuvent pas. Les propriétés peuvent être liées aux données, les champs ne peuvent pas.

15voto

Sklivvz Points 16412

Tu peux écrire

 public string Forename{ get; private set; }
 

obtenir des propriétés en lecture seule ... Ce n’est toujours pas aussi polyvalent que les propriétés réelles, mais c’est un compromis qui, pour certains travaux.

13voto

Reed Copsey Points 315315

Je ne suis pas sûr de ce que la différence entre ces 2 états, j'ai toujours pensé que vous avez utilisé les propriétés si vous voulais supplémentaires get/set logique?

Dans le premier cas, le compilateur va automatiquement ajouter un champ pour vous, et enveloppez-le bien. C'est en fait l'équivalent à:

private string forename;
public string Forename
{
    get
    { 
        return this.forename;
    }
    set
    {
        this.forename = value;
    }
}

Il existe de nombreux avantages à l'aide de propriétés sur les champs. Même si vous n'avez pas besoin de certaines raisons spécifiques, tels que la liaison de données, ce qui contribue à l'avenir de votre API.

Le principal problème est que, si vous faites un domaine, mais dans la v2 de votre demande, besoin d'une propriété, vous aurez briser l'API. Par l'utilisation d'un système de propriété à l'avant, vous avez la possibilité de changer votre API à tout moment, sans vous soucier de la source ou binaire des problèmes de compatibilité.

4voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X