68 votes

Utiliser une propriété ou une méthode en lecture seule ?

J'ai besoin d'exposer le " est cartographié ? "état d'une instance d'une classe. Le résultat est déterminé par un contrôle de base. Il s'agit pas en exposant simplement la valeur d'un champ. Je ne sais pas si je dois utiliser une propriété en lecture seule ou une méthode.

Propriété en lecture seule :

public bool IsMapped
{
    get
    {
        return MappedField != null;
    }
}

Méthode :

public bool IsMapped()
{
    return MappedField != null;
}

J'ai lu l'article de MSDN Choisir entre les propriétés et les méthodes mais je ne suis toujours pas sûr.

85voto

Aschratt Points 5695

La norme C# dit

§ 8.7.4

A propriété est un membre qui donne accès à une caractéristique d'un objet ou d'une classe. La longueur d'une chaîne de caractères, la taille d'une police, le titre d'une fenêtre, le nom d'un client, etc. sont des exemples de propriétés. Les propriétés sont une extension naturelle des champs. Les deux sont des membres nommés avec des types associés, et la syntaxe d'accès aux champs et aux propriétés est la même. Toutefois, contrairement aux champs, les propriétés ne désignent pas d'emplacements de stockage. Au lieu de cela, les propriétés ont des accesseurs qui spécifient les instructions à exécuter lorsque leurs valeurs sont lues ou écrites.

tandis que les méthodes sont définies comme

§ 8.7.3

A méthode est un membre qui implémente un calcul ou une action qui peut être effectué par un objet ou une classe. Les méthodes ont une liste (éventuellement vide) de paramètres formels, une valeur de retour (sauf si le type de retour de la méthode est void ), et sont soit statiques, soit non statiques.

Propriétés et méthodes sont utilisés pour réaliser encapsulation . Les propriétés encapsulent les données, les méthodes encapsulent la logique. Et c'est pourquoi vous devriez préférer une propriété en lecture seule si vous exposez des données. Dans votre cas, il n'y a pas de logique qui modifie l'état interne de votre objet. Vous voulez donner accès à une caractéristique d'un objet .

Si une instance de votre objet IsMapped ou non est une caractéristique de votre objet. Il contient un contrôle, mais c'est pourquoi vous avez des propriétés pour y accéder. Les propriétés peuvent être définies en utilisant la logique, mais elles ne doivent pas exposer la logique. Comme l'exemple mentionné dans la première citation : Imaginez que le String.Length propriété. Selon l'implémentation, il se peut que cette propriété boucle la chaîne et compte les caractères. Elle effectue également une opération, mais "de l'extérieur", elle ne donne qu'une déclaration sur l'état/les caractéristiques internes de l'objet.

21voto

Micha Points 3306

J'utiliserais la propriété, car il n'y a pas de véritable "faire" (action), pas d'effets secondaires et ce n'est pas trop complexe.

11voto

Haris Hasan Points 17497

Je crois personnellement qu'un method doit faire quelque chose ou accomplir une action. Vous ne faites rien à l'intérieur IsMapped donc ce devrait être un property

7voto

venerik Points 2039

J'opterais pour une propriété. Principalement à cause de la première phrase de l'article MSDN cité en référence :

En général, les méthodes représentent des actions et les propriétés des données.

4voto

nvoigt Points 20484

Dans ce cas, il me semble assez clair que ce devrait être une propriété. Il s'agit d'une simple vérification, sans logique, sans effets secondaires, sans impact sur les performances. Il n'y a pas plus simple que cette vérification.

Edit :

Veuillez noter que s'il y a était l'un des éléments susmentionnés et que vous l'intégrez dans une méthode, cette méthode doit comporter un verbe fort, et non un verbe auxiliaire comme "est" ou "a". Une méthode fait quelque chose. Vous pourriez l'appeler VerifyMapping ou DetermineMappingExistance ou quelque chose d'autre, du moment que cela commence par un verbe.

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