2010-10-11 6 views
4

j'ai remarqué que certains développeurs utilisent cette syntaxe pour les propriétés:Comment définir les propriétés

private int someVar; 
public int SomeVar 
     { 
      get { return someVar; } 
      set { someVar= value; } 
     } 

alors que certains développeurs utilisent ceci:

public int SomeVar 
     { 
      get; 
      set; 
     } 

Je devine les deux seront même performance sage. Pour la lisibilité, la réutilisabilité et pour d'autres facteurs que vous pourriez connaître, lequel est le meilleur et considéré comme la façon d'utiliser dans la communauté.

+0

Le compilateur convertit à peu près le second en premier. Jetez un oeil à Reflector :) – Bryan

+0

C'est ce que je pense aussi, ce que je voudrais savoir, c'est la syntaxe à privilégier pour la lisibilité et la réutilisabilité, etc. –

+1

Il est à noter que les propriétés automatiques ont été introduites dans C# 3.0. versions (et non refacturées) utilisera toujours la version la plus spécifiée. –

Répondre

5

Si vous n'effectuez aucune validation ou quoi que ce soit lorsqu'une propriété est accédée ou modifiée, utilisez la propriété auto (votre deuxième exemple). Si vous avez besoin de valider votre setter, ou d'appeler une méthode quand quelqu'un obtient ou définit la valeur, ou quelque chose de cette nature, utilisez votre premier exemple. Une propriété auto vous empêche simplement d'avoir à la fois une propriété et un champ de sauvegarde si vous n'avez pas besoin des deux.

+0

et les propriétés auto sont disponibles dans C# 3.0 et versions ultérieures. – Adeel

1

La version ultérieure est plus lisible. Et évite les missiles de "someVar" ou "SomeVar"

1

Ils sont vraiment les mêmes quand il s'agit de cela. Pour les propriétés implémentées automatiquement, le compilateur crée le champ pour vous. Si vous n'avez pas besoin d'un champ parce que c'est un getter ou un setter standard, la plupart des gens utilisent des propriétés implémentées automatiquement. Si vous avez besoin de logique dans vos propriétés que vous avez besoin d'un champ.

1

Cela dépend ...

Si tout ce que vous faites est couchait et en relisant la valeur d'un champ, puis la deuxième méthode est préférée car elle est considérée comme plus lisible. Ce mécanisme a été introduit en C# 3.0.

Si votre getter doit effectuer une validation sur la valeur ou si votre setter doit déclencher un événement PropertyChanged afin que l'interface utilisateur puisse être mise à jour, la première méthode est requise.

1

Comme tout le monde l'a dit, cette dernière est appelée propriété auto qui génère un champ automatiquement au moment de la compilation. Une chose supplémentaire à noter est que l'équivalent exact de ce que vous avez est

public int SomeVar 
    { 
     get; 
     private set; 
    } 
+0

Il n'y a rien dans son code qui indique un ensemble privé. C'est une propriété publique sans modificateurs sur le get/set, ce qui rend ces deux publics, aussi bien. –

+0

bon point, n'a pas remarqué le setter – Jeff

-1

La base et la meilleure façon de définir une propriété est comme ce

private int _student_rollnumber; 
private string _student_name; 
public int Student_RollNumber 
{ 
get { return _student_rollnumber; } 
set { _student_rollnumber = value; } 
} 
public string Student_Name 
{ 
get { return _student_name; } 
set { _student_name = value; } 
} 
+0

Pourquoi est-ce le meilleur moyen? – Emile

+0

Personnellement, je n'aime pas cela pour la lisibilité, car il utilise "_" beaucoup. – Numenor

+0

Parce que j'ai vu de nombreux développeurs ont utilisé le même modèle. Alors j'ai pensé que c'est la meilleure façon. –

0

Méthode 1

private int someVar; 
public int SomeVar 
    { 
     get { return someVar; } 
     set { someVar= value; } 
    } 

Cette méthode n'est généralement pas préférée car certains langages (tels que VB.NET) sont insensible à la casse. Par conséquent someVar, SomeVar, SOMEVAR et somevar ainsi que toutes les combinaisons possibles de majuscules et de minuscules, vous pouvez penser à la même chose pour le compilateur et cela est susceptible de générer des erreurs.


Méthode 2

public int SomeVar{get; set;} 

Cette méthode, appelée la mise en œuvre automatique de propriété, crée une variable privée dans l'ombre pour le stockage et la récupération des données transmises à la propriété.

Dans VB.NET, le nom de la variable créée pour chaque propriété implémentée automatiquement est identique à la propriété précédée d'un trait de soulignement (_). Ainsi, une propriété avec le nom SomeProperty aura une variable privée correspondante appelée _SomeProperty.

Cela peut être démontré dans votre code VB.NET en créant une propriété implémentée automatiquement, puis en créant une variable avec le même nom que la propriété implémentée automatiquement précédée d'un trait de soulignement.

En C#, cependant, si vous avez une propriété implémentée automatiquement, une variable décorée avec l'attribut CompilerGenerated est utilisée pour la propriété. Ainsi, vous pouvez avoir la propriété auto-implémentée et une variable avec le même nom que la propriété, mais dans un boîtier différent (comme dans la méthode 1).


Conclusion
Il est généralement préférable d'utiliser les propriétés implémentées automatiquement chaque fois que possible. Lorsque le besoin se fait que vous effectuez une validation avant d'affecter la propriété à sa variable correspondante, il est recommandé d'utiliser name comme la variable à laquelle la valeur de la propriété est stockée avec un préfixe de soulignement comme ci-dessous.

private int _SomeVar; 
public int SomeVar 
{ 
    get { return _SomeVar;} 
    set { _SomeVar = value > 0 ? value : 0; } 
} 
Questions connexes