2010-12-12 7 views
2

Question très simple, mais je trouve très important de comprendre pourquoi nous le faisons.Pourquoi avons-nous besoin de créer des variables de classe pour obtenir et définir une propriété?

je peux créer une propriété dans la classe comme suit:

1ère approche:

public class MyClass 
{ 
    public string MyProperty {get;set;} 
} 

2ème approche:

public class MyClass 
{ 
    private string _myProperty; 

    public string MyProperty 
    { 
     get 
     { 
      return _myProperty; 
     } 
     set 
     { 
      _myProperty = value; 
     } 
    } 
} 

Presque tous les articles utilisent l'approche plus tard. Pourquoi avons-nous besoin de créer une variable temporaire dans la classe pour contenir la valeur de la chaîne. Pourquoi ne pouvons-nous pas simplement utiliser la première approche? La deuxième approche offre-t-elle des avantages? N'est-ce pas une mauvaise mémoire et la performance sage de créer une variable supplémentaire pour stocker une valeur?

Répondre

8

Automatic properties n'ont pas été ajoutés à C# jusqu'à C# 3.0, tant d'exemples ou d'articles qui utilisent la forme postérieure ont été écrits avant la sortie de C# 3.0. À moins que vous ayez besoin de faire un travail supplémentaire chez vos régleurs et acquéreurs, il n'y a aucune raison de choisir l'un plutôt que l'autre.

+2

Bonne réponse. Comme l'explique le lien, la première approche permet au compilateur de faire le second pour vous. Ils ne sont pas différents, sauf sauver des frappes. –

1

Auto-setters, propriétés automatiques ou auto-implemented properties (la première approche) ne sont disponibles que pour .NET Framework> = 3.0. Ainsi, les articles écrits avant la version Framework 3.0 utilisent la seconde approche.

Les deux approches sont équivalentes. En interne, ils fonctionnent de la même manière, donc je préfère écrire moins de code et utiliser la première approche autant que possible.

+0

Merci :-) .. – InfoLearner

1

Les propriétés automatiques n'étaient pas toujours disponibles. De même, si vous aviez une sorte d'action spéciale dans une propriété, mais que vous ne vouliez pas qu'elle soit exécutée en interne à la classe, la variable déclarée serait également utile.

0

Je ne suis certainement pas bon en C# mais si je comprends bien, ces méthodes sont les mêmes pour votre code. La différence est que dans la première méthode, vous ne pouvez pas contrôler directement la propriété PRIVATE MyProperty générée automatiquement. Mais imaginez que vous deviez faire certaines routines ou ce qui est encore pire - pour étendre cette classe par un autre. Vous allez échouer avec la première méthode.

+0

Je n'ai vraiment pas compris cela. Pouvez-vous s'il vous plaît expliquer, merci – InfoLearner

1

Bien sûr, si vous voulez être en mesure d'accéder au champ de sauvegarde, vous devrez toujours écrire la syntaxe complète. Par exemple, si vous souhaitez générer des événements de modification:

private string _name; 
public string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     if (_name != value) 
     { 
      _name = value; 
      RaisePropertyChanged("Name"); // assuming this method handles raising the event 
     } 
    } 
} 
Questions connexes