20 votes

Initialisation des champs d'instance par rapport aux variables locales

Je me suis toujours demandé pourquoi, dans l'exemple suivant, il est acceptable de no initialiser le champ d'instance (en tenant compte du fait qu'il aura sa valeur par défaut) et y accéder, tandis que les variables locales apparemment debe être initialisé, même si je l'initialise à la valeur par défaut, il sera de toute façon...

  public class TestClass
  {
    private bool a;

    public void Do()
    {
      bool b; // That would solve the problem: = false;
      Console.WriteLine(a);
      Console.WriteLine(b); //Use of unassigned local variable 'b'
    }
  }

1voto

psychotik Points 11937

Le constructeur implicite initialise la variable d'instance pour vous. Même lorsque vous spécifiez un code mais n'initialisez pas un champ, cela est fait pour vous dans le cadre de la création de l'objet sur le tas. Ce n'est pas le cas des variables locales de la pile.

1voto

burca toni Points 51

C'est vraiment une question de ce que l'avertissement est capable de vous dire. Il n'y a vraiment aucun moyen pour l'avertissement d'être sûr qu'une autre méthode n'a pas initialisé la variable de classe, donc il n'avertit que sur celle dont il peut être certain qu'elle n'est pas initialisée.

De plus, il s'agit d'un avertissement et non d'une erreur car, techniquement, il n'y a rien de mal à utiliser la variable non assignée (la valeur 'false' est garantie) mais c'est probablement une erreur de logique de ne pas l'avoir assignée.

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