Nous allons tout d'abord s'entendre sur ce dont nous parlons. La question est de savoir comment nous avons accès les membres de l'instance de l'intérieur non-statiques les méthodes et les constructeurs d'une classe ou d'un de ses sous-classes, si modificateurs de visibilité permettent de faire cela.
Souligner notation
- suggère que vous utilisez le "_" préfixe dans le nom des champs privés
- il a également dit que vous ne devriez jamais utiliser le "ce", sauf si c'est absolument nécessaire
Cette notation
- suggère que vous venez d'utiliser toujours "." pour accéder à tout membre de l'instance
Pourquoi cette notation existent?
Parce que c'est la façon dont vous
- dire à part un paramètre à partir d'un champ lorsqu'ils partagent le même nom
- assurez-vous que dans le contexte de la présente instance
Exemple
public class Demo
{
private String name;
public Demo(String name) {
this.name = name;
}
}
Pourquoi ne soulignent-notation existent?
Certaines personnes n'aiment pas taper "ce", mais ils ont encore besoin d'un moyen de distinguer un champ et d'un paramètre, c'est pourquoi ils ont décidé d'utiliser "_" devant un champ
Exemple
public class Demo
{
private String _name;
public Demo(String name) {
_name = name;
}
}
On peut penser que c'est juste la question de goûts personnels et les deux manières sont tout aussi bon/mauvais. Cependant, il ya certains aspects où cette notation bat le trait de soulignement-notation:
La clarté
- souligner notation encombre noms
- cette notation tient noms intacte
La cohérence
- soulignez-la notation est incohérente, il fait de vous traiter les champs d'une manière spéciale, mais vous ne pouvez pas l'utiliser avec d'autres membres
- cette notation est cohérente, vous n'avez pas à penser, que vous venez de toujours utiliser "ce" pour désigner tout membre
L'auto-complétion
Lorsque vous avez besoin de voir la liste des membres de l'instance:
- souligner notation ne vous aide pas beaucoup, parce que quand vous tapez "_" la saisie semi-automatique popup vous montre les champs privés et tous les types liés assemblages mixtes avec le reste des membres de l'instance
- cette notation donne une réponse claire, en tapant "ce" tout ce que vous voyez est la liste des membres, et rien d'autre
L'ambiguïté
Parfois, vous avez à traiter avec le code sans l'aide de l'Intellisense. Par exemple, lorsque vous sont en train de faire des revues de code ou de la navigation sur le référentiel de code source en ligne.
- soulignez-la notation est ambigu: Quand vous voyez quelque Chose.SomethingElse vous ne pouvez pas dire si quelque Chose est une classe et SomethingElse est sa propriété statique... ou peut-être quelque Chose est une instance actuelle de la propriété qui dispose de sa propre propriété de SomethingElse
- cette notation est clair: Quand vous voyez quelque Chose.SomethingElse il ne peut signifier qu'une classe avec une propriété statique et quand vous voyez cela.Quelque chose.SomethingElse vous savez que quelque Chose est membre et SomethingElse est sa propriété
Les méthodes d'Extension
Vous ne pouvez pas utiliser les extensions de méthodes sur l'instance elle-même sans l'aide de "cela".
- souligner notation exige que vous n'utilisez pas "ce", mais avec l'extension des méthodes que vous avez à
- cette notation vous permet d'économiser de l'hésitation, vous pouvez toujours utiliser "ce", période.
Support Visual Studio
- souligner notation ne dispose pas d'un support intégré dans Visual Studio
- cette notation est prise en charge par Visual Studio naturellement: http://www.screenr.com/zDCH
Les recommandations officielles
Il ya beaucoup de lignes directrices officielles qui disent clairement "ne pas utiliser de soulignement", en particulier en C#