web-dev-qa-db-fra.com

Normes de codage C # pour les variables de membre privé

J'ai vu deux approches communes pour les normes de codage pour les variables de membre privé:

class Foo
{
    private int _i;
    private string _id;     
}

et 

class Foo
{
    private int m_i;
    private string m_id; 
}

Je crois que ce dernier vient du C++. En outre, de nombreuses personnes spécifient le type avant la variable membre (par exemple, double m_dVal) pour indiquer qu'il s'agit d'une variable membre non constante du type double?

Quelles sont les conventions en C #?

28
Sasha

Outre les deux que vous avez mentionnés, il est très courant en C # de ne pas avoir de préfixe pour les membres privés. 

class Foo
{
    private int i;
    private string id; 
}

C’est ce que j’utilise et aussi ce qui est recommandé dans Les directives de nommage internes de Microsoft .

61
driis

Comme indiqué par Brad Abrams: directives de codage interne :

N'utilisez pas de préfixe pour le membre variables (_, m_, s_, etc.). Si vous vouloir distinguer entre local et les variables membres que vous devriez utiliser “this.” en C # et “Me.” en VB.NET.

14
Mehrdad Afshari

Je pense que le principe important ici est que vous êtes cohérent. Utilisez un préfixe "_" ou "m" si c'est ce que vous aimez faire et si cela correspond au reste du code avec lequel vous travaillez. Quoi que vous choisissiez, respectez-le et soyez cohérent.

11
Brandon Montgomery

Je préfère utiliser votre premier exemple, ou des propriétés automatiques telles que celle-ci, qui évitent d'avoir les champs privés définis dans votre classe:

public String MyString { get; set; }

Utilisez l'extrait prop pour les rendre VRAIMENT rapides.

10
Daniel Schaffer

Si je me souviens bien de la lecture Framework Design Guidelines , il n'y a pas vraiment de convention pour les variables membres privés, sauf qu'il ne faut pas utiliser la notation hongroise ni mettre en majuscule la première lettre du nom de la variable (utilisez Camel-casing). . Le livre contient des citations qui corroborent vos deux exemples et qui n’utilisent aucun préfixe. 

Personnellement, je préfère le préfixe "m_".

7
AJ.

Conseils généraux de Microsoft ici:

http://msdn.Microsoft.com/en-us/library/ms229002.aspx

Les propriétés automatiques en C # sont excellentes et je les utilise quand je peux mais il y a des cas où elles ne fonctionnent pas pour moi, par exemple lors de la vérification du type ou de la valeur d'une méthode set.

En général: utilisez un boîtier chameau et ne préfixez pas votre nom avec un soulignement ou un préfixe de type.

public int Age {get; set;}

ou

private int age;
public int Age
{
    get { return age; }
    set
    {
        if(value < 0)
            throw new InvalidOperationException("Age > 0");
        age = value;
    }
}
6
andleer

Personnellement, j'ai toujours utilisé votre premier exemple de:

    public class Foo
    {
        private int _i;
        private string _id;
    }

En fait, c'est ce que toute mon équipe utilise. De plus, celui que vous avez mentionné m_dVal est connu sous le nom de notation hongroise, voici le entrée Wikipedia . Notation hongroise est en réalité contraire aux normes de codage de nos équipes, donc je ne l'utilise jamais.

5
Alexander Kahoun

Le mieux est d'utiliser tout ce qui est déjà utilisé dans le projet. Si vous démarrez un nouveau projet, utilisez ce que vous utilisez le plus souvent dans l'entreprise.

4
ibz

Je préfère le caractère de soulignement comme préfixe pour les champs privés non const non en lecture seule. Pourquoi? Motifs: 1. En regardant simplement sur une variable, je peux faire la distinction entre variable de champ et variable locale/de paramètre. En utilisant "ceci". pour tous les champs n'est pas une option - sa plus longue . 2. Il y a une ambiguïté entre le paramètre et le champ:

class Foo
{
  private int id;
  public Foo(int id)
  {
    id = id; //Will compile and work fine. But field will not be initialized.
  }
}
3
Aleksei

J'ai tendance à aller à la première convention, un soulignement simple. Je ne spécifie pas non plus le type dans le nom, car Intellisense me dit de quoi il s'agit (je sais, cela peut être une béquille).

Le mieux est de vérifier auprès de vos collègues ou de vos coéquipiers du projet et de décider simplement d’une convention, certaines d’entre elles sont plutôt arbitraires.

1
Jon Dewees

Je préfère ne pas utiliser de préfixe du tout pour les variables membres. Pour ceux déclarés en dehors de la méthode, j'utilise "this.memberVariableName" pour les distinguer de ceux déclarés dans la méthode.

1
cyclo

En C++, les identifiants commençant par _ sont considérés comme une mauvaise pratique et doivent être laissés à un usage interne. C’est pourquoi il est parfois considéré comme une mauvaise pratique en C # de préfixer un nom de variable avec _ ... bien qu’il n’y ait aucune raison pour que vous ne puissiez pas le faire, car tous les éléments internes .NET sont correctement encapsulés, contrairement au C/C++ bibliothèques standard.

0
jheriko