Ça m'a frappé récemment sur un projet sur lequel je travaillais. La plupart des gens sont familiers avec la propriété de la récursivité:
public int Test
{
get { return this.test; }
set { this.Test = value; }
}
private int test;
Vous avez accidentellement mis une majuscule T dans ce setter, et que vous avez ouvert vous-même jusqu'à un StackoverflowException
. Pire encore, si vous n'avez pas défini, souvent, visual studio va s'auto-corriger le boîtier pour vous à l'état non valide.
J'ai fait quelque chose de similaire, mais, dans un constructeur récemment:
public TestClass(int test)
{
this.Test = Test;
}
Malheureusement, ici vous n'obtenez pas une StackOverflowException, maintenant vous avez une erreur de programmation. Dans mon cas, cette valeur a été passé à un WebService qui a plutôt utilisé une valeur par défaut (ce qui n'est pas 0), ce qui m'a fait passer à côté du fait que j'avais mal attribué. Les tests d'intégration sont tous passés, parce que le service n'a pas dit
"Hey, vous avez oublié ce vraiment important champ!"
Que puis-je faire pour éviter ce genre de comportement? J'ai toujours conseillé à l'encontre de la définition des variables comme le suivant, et je n'aime pas personnellement, mais je ne peux pas penser à d'autres options:
private int _test;
private int mTest;
MODIFIER
Raisons que le trait de soulignement ou m préfixe sont indésirables normalement que je peux penser sont:
- La lisibilité
- Un peu plus difficile à faire défiler les membres si vous êtes héritant de la 3e partie des classes que vous obtenez un mélange de styles.