2010-08-31 3 views
1

Tenir compte de l'extrait de code suivant de .NET 4.0 bibliothèque:Initialisation explicite des valeurs par défaut des champs privés dans les constructeurs. WTF?

private T[] array; 
private static T[] emptyArray; 
private int size; 
private int version; 

static Stack() 
{ 
    Stack<T>.emptyArray = new T[0]; 
} 

public Stack() 
{ 
    array = Stack<T>.emptyArray; 
    size = 0; 
    version = 0; 
} 

Y at-il raison de l'initialisation du type de valeur des champs privés valeurs par défaut (size et version dans l'exemple ci-dessus) explicitement autre que les normes de codage de la société ?

Répondre

1

Non, il n'y a pas, du moins pas de raison technique. Peut-être que dans certains cas, on pourrait le faire pour faire une remarque, par exemple si vous avez une variable de compteur quelconque et que vous voulez préciser qu'elle commence à partir de zéro. Mais je pense que même cela est un peu discutable.

0

Je pense que c'est une bonne habitude d'initialiser des collections, principalement parce qu'il garantit au développeur qu'il n'a pas besoin d'initialiser quoi que ce soit à l'utilisation, et qu'il suppose simplement que la variable a été initialisée.

public class Store 
{ 
    public Store() 
    { 
     // Ready to go! 
     Products = new List<Product>(); 
    } 

    public string Id {get;set;} 
    public IList<Product> Products {get;set;} 
} 

Vous sautez à travers le tralala d'avoir à vérifier si la collection a été initialisé, sinon le faire, sinon ... bâillement

1

OMI, il n'y a pas besoin ou un avantage pour initialiser privé variables à valeurs par défaut (sauf si cela fait partie des normes).

Edit: quelques fois, il peut donner un sens (car il améliore la lisibilité du code) - par exemple

public const OP_GET = 0; 
public const OP_ADD = 1; 
... 

private int operation = OP_GET; 
1

Si elles sont données primitives type que vous n'avez pas besoin d'initialiser ils auront toujours leur valeur par défaut

int, long, etc. aura toujours sa valeur par défaut à 0 alors que bool aura de faux, etc.

si elle est un type de référence que vous pourriez avoir à initialiser afin qu'ils aient une certaine valeur par défaut (en fonction de votre logique) et éviter les erreurs de référence nulles

Questions connexes