2009-04-08 10 views
0

Y a-t-il d'autres avantages à la «nouvelle» méthode plus courte de gestion des propriétés, à part des avantages de performances plus proches du code, une utilisation moindre de la mémoire, etc.?Y a-t-il d'autres avantages, ou peut-être des inconvénients de la "nouvelle" façon de définir les propriétés?

Une écriture

public string StrVariable { get; set;} 

Plutôt que

private string strVariable; 

public string StrVariable 
{ 
    set 
    { 
     strVariable = value; 
    } 
    get 
    { 
     return strVariable; 
    } 
} 

Et sont-il des inconvénients - certains soutiendraient peut-être le code est moins lisible, moins explicite?

Répondre

4
+0

Merci, j'étais sûr que quelqu'un avait déjà posé la question, mais ne pouvait pas le trouver. Est-ce juste que j'ai du mal à trouver des choses avec la recherche SO? –

+0

Non, quand je recherche plusieurs mots-clés, il ne semble pas y avoir de classement par pertinence. Cela rend également la tâche difficile lorsque vous ne connaissez pas le nom de la chose que vous essayez de rechercher. – Brandon

0

Un inconvénient que je peux voir est que si vous voulez faire quelque chose d'autre dans les get/set routines. Incrémenter un compteur ou quelque chose de ce genre. Peut-être valider l'entrée si vous ne l'avez pas déjà fait.

+0

Dans ce scénario, vous passeriez simplement à explicite; Je crois que le PO fait référence à la simple affaire pass-thru. –

3

Un grand inconvénient dans un scénario spécifique - vous perdez le contrôle du nom de champ. Cela peut sembler insignifiant, mais is a big problem si vous utilisez la sérialisation binaire (via BinaryFormatter).

Autres choses: cependant,

  • ils ne peuvent pas être readonly au niveau du terrain
  • pour struct s vous devez appeler : this() dans les constructeurs personnalisés

Ils font, font un travail fantastique dans 99% des cas - ils expriment le code proprement, tout en permettant d'ajouter des détails d'implémentation supplémentaires plus tard (en basculant vers des champs explicites) sans casser le code appelant (sauf pour les points ci-dessus).

+0

si je me souviens bien, le formatage SOAP avec WCF est également affecté. –

+0

WCF utilise normalement DataContractSerializer, qui ne sera pas affecté - SoapFormatter est obsolète, mais oui: souffre la même chose que BinaryFormatter. –

0

Les propriétés de collection sont également un problème. Ils ne sont pas initialisés avec Autoproperties.

Exemple:

public class foo 
{ 
    public List<String> S1 { get; set; } 

    private List<string> s = new List<string>(); 
    public List<String> S2 
    { 
     get { return s;} 
     set { s = value; } 
    } 
} 

foo f = new foo(); 
f.S1.Add("thing"); 
f.S2.Add("thing"); 

f.S1.Add bomberez à une exception nullref.