Conventions de nommage pour les membres privés of.NET types [fermé]

Normalement, quand j'ai un champ privé dans une classe ou une structure, j'utilise camelCasing, donc il serait évident que c'est en effet privé quand vous voyez le nom, mais dans le code C# de certains de mes collègues, je vois qu'ils utilisent m_ principalement ou parfois _, comme il y a une sorte de convention.

Les conventions de nommage. Net ne vous empêchent-elles pas d'utiliser des traits de soulignement pour les noms de membres?

Et quand vous mentionnez les conventions de nommage MS ou ce qui ne l'est pas, ils vous disent que leur est le le meilleur moyen, mais n'explique pas le raisonnement derrière cela.

Aussi quand je suis propriétaire d'un code, où j'utilise clairement camelCasing pour les membres privés, quand ils doivent apporter une modification mineure au code, ils s'en tiennent à leurs conventions au lieu de suivre les conventions qui existent.

Est-ce une controverse?

29
demandé sur Joan Venge 2010-03-26 23:00:48

10 réponses

Techniquement, les traits de soulignement sont une violation des conventions. net (ou du moins utilisé pour être -- see comment thread), mais les programmeurs Microsoft eux-mêmes utilisent souvent des traits de soulignement, et de nombreux exemples dans la documentation utilisent des traits de soulignement. Je pense qu'il est très utile de pouvoir voir en un coup d'œil quelles variables sont des variables membres (champs) et lesquelles sont locales. Le trait de soulignement aide vraiment à cela. Il sépare également bien les variables membres privées des variables locales dans IntelliSense.

Veuillez consulter cette page très utile pour les conventions de nommage. net:

Http://10rem.net/articles/net-naming-conventions-and-programming-standards---best-practices

Et voici une page avec les recommandations officielles de Microsoft:

Https://msdn.microsoft.com/en-us/library/ms229045%28v=vs.110%29.aspx

17
répondu devuxer 2015-08-31 01:18:26

Les directives. NET framework autorisent un préfixe _ ou m_ sur les noms de champs privés, car elles ne fournissent aucune indication sur les champs privés. Si vous regardez le BCL dans reflector, vous remarquerez qu'un préfixe est le modèle le plus répandu.

La page de référence pour nommer les champs est située ici . Avis les directives ne spécifient que l'utilisation des champs publics et protégés. Champs privés ne sont tout simplement pas couverts.

21
répondu JaredPar 2010-03-26 20:19:26

Je préfixe généralement les variables membres privées avec un trait de soulignement.

Cela les rend plus faciles à repérer lorsque vous essayez de lire le code et c'est autorisé par les directives Microsoft:

public class Something
{
    private string _someString = "";

    public string SomeString
    {
        get
        {
            return _someString;
        }
        set
        {
            // Some validation
            _someString = value;
        }
    }
}

Comme d'autres l'ont dit, le plus important est d'être cohérent. Si vous faites partie d'une équipe qui a une norme de codage qui fait les choses de la manière m_, n'essayez pas d'être un rebelle et faites le vôtre. Cela rendra les choses plus difficiles pour tout le monde.

11
répondu Justin Niessner 2017-04-24 07:30:38

Eh bien, microsoft ne participe à aucune des 2 options. Si sur Visual Studio, vous encapsulez un champ en utilisant " refactor - >Encapsulate Field..."pour

private string _myVar

Et

private string myVar

Les deux génèrent une propriété comme celle-ci

public string MyVar
{
    get { return myVar; }
    set { myVar = value; }
}

Donc pour microsoft c'est la même chose :-) il ne s'agit que de parvenir à un accord avec l'équipe de développement pour que tout le monde utilise la même approche.

Normalement, je n'utilise jamais de champs privés sauf très spécifiques situation. J'encapsule des champs privés avec des propriétés protégées. Mieux pour l'héritage et IMHO plus clair.

4
répondu Claudio Redi 2010-03-26 20:49:02

Même dans la BCL, vous voyez beaucoup d'incohérence avec les conventions de nommage, certaines classes ont " _", certains "m_ " et d'autres seulement la version pascal de la propriété.

Le Trait de soulignement est bon parce que vous empêchez les stackoverflows accidentels , bien que des versions plus récentes de Visual Studio vous en avertissent de toute façon. Ils apparaissent également en premier dans votre intellisense, évitant la nécessité d'énigmer votre code avec this.someProperty ou de rechercher dans toute la liste.

, tant Que l'équipe d'accord sur une norme, cela ne fait pas beaucoup de différence, mais après avoir utilisé des underscores pour les années 5+, Je ne voudrais personnellement pas revenir aux alternatives.

Si Vous possédez la base de code et la maintenez, j'insisterais pour qu'ils utilisent vos normes. Si elles ne le font pas alors simple refactoriser combiné avec un email poli pourquoi vous l'avez fait.

3
répondu Chris S 2017-05-23 12:18:07

Veuillez consulter le dernier paragraphe des directives D'Utilisation du Champ MS .

N'appliquez pas de préfixe aux noms de champs ou aux noms de champs statiques. Plus précisément, n'appliquez pas de préfixe à un nom de champ pour faire la distinction entre les champs statiques et non statiques. Par exemple, l'application d'un préfixe g_ ou s_ est incorrecte.

2
répondu Amir Karimi 2011-07-07 19:56:41

Aucune convention ne vous empêche d'utiliser des noms d'identifiants valides. L'important est d'être cohérent . J'utilise " _ "pour toutes les variables privées, bien que la" bonne façon "(par exemple ReSharper) semble vouloir que vous les déclariez en commençant par une lettre minuscule et différenciiez les paramètres et les membres par l'utilisation de " ceci."

1
répondu Otávio Décio 2010-03-26 20:03:51

Je ne crois pas vraiment qu'il existe un meilleur moyen de cas des variables et des méthodes. Ce qui importe, c'est que vous et votre équipe soyez cohérents. Les conventions de nommage. Net sont excellentes comme Microsoft les spécifie, mais certaines personnes préfèrent d'autres conventions...

En tant que côté personnel, je tente de préfixer les variables et les méthodes privées avec"_", puis le boîtier camel, les variables et les méthodes protégées dans le boîtier camel et les variables et méthodes publiques avec le boîtier pascal, mais c'est juste moi.

1
répondu LorenVS 2010-03-26 20:04:04

Il y a deux articles MSDN (here et here) sur les directives de conception qui contiennent également des conventions de nommage. Dommage qu'ils soient limités aux choses "publiquement visibles". Ils n'offrent pas de directives pour nommer des objets non publics et, pour autant que je sache, Microsoft ne fournit pas de directives de nommage officielles pour les non-publics.

StyleCop (Un outil Microsoft) est contre l'utilisation de traits de soulignement dans les noms. Deux raisons que j'ai entendu des développeurs pourquoi ils préfèrent utiliser le soulignement:

  • Il marque clairement les membres non-publics (type _ et intellisense vous montrera tous les non-publics).
  • Il empêche les conflits entre les variables locales (qui sont souvent aussi écrites dans camelCase), les paramètres de méthode et les champs non publics.

IMO les deux sont une bonne raison d'utiliser le trait de soulignement, mais je n'aime pas comment cela donne l'air à mon code, donc je ne l'utilise pas non plus. Je préfère utiliser uniquement camelCase lorsque cela est possible et j'ajoute un this. en cas de conflit avec des variables locales ou des paramètres de méthode.

Nous essayons simplement de garder le style de codage cohérent au sein de l'équipe et du projet.

1
répondu stmax 2010-03-26 20:16:36

Oui, la convention de nommage appliquée par StyleCop (qui applique les règles de codage MS) est "no underscores, camel case" pour les champs d'instance privée.

Il est à noter que les champs constants/statiques en lecture seule ont la convention de nommage' Pascal case ' (doivent commencer par des majuscules mais ne pas être des majuscules hurlantes).

Les autres conventions de nommage sont des holdovers du style C++, qui était le style initial utilisé pour coder C # puisque c'est de là que vient l'équipe C#.

Remarque Importante: Que vous utilisiez ou non ce style de codage dépend entièrement de l'équipe de développement. Il est beaucoup plus important que tous les membres de l'équipe utilisent le même style que n'importe quel style particulier.
OTOH, MS a choisi ce style après beaucoup de délibérations, donc je l'utilise comme un bris d'égalité. S'il n'y a pas de raison particulière d'aller d'une manière ou d'une autre avec un style de codage, je vais comme StyleCop va.

1
répondu Task 2010-03-26 20:23:38