2010-02-15 5 views
4

Bonjour à tous, quelle est la meilleure pratique en utilisant C# et pourquoi?
1.Champs et propriétés Meilleure pratique en C#

private string name; 

public string Name 
{ 
    get { return name; } 
    set { name = value; } 
} 

2.

public string Name { get; set; } 

3.

protected string name; 
public string Name 
{ 
    get { return name; } 
    set { name = value; } 
} 

4. S'il vous plaît ajouter ...

+4

utilisation qui jamais vous avez besoin, on est pas mieux que l'autre. Ils sont chacun éligibles en fonction de ce que vous essayez d'atteindre. –

+1

Dupliquer - http://stackoverflow.com/questions/295104/what-is-the-difference-between-a-field-and-a-property-in-c – ChrisF

+0

@yayan: Si vous trouvez l'une des réponses utile , pourriez-vous le marquer comme accepté en utilisant l'icône de la coche sous les votes s'il vous plaît? –

Répondre

13

Snippets et sont tous les deux bien. La seconde est simplement un moyen plus pratique d'écrire le premier lorsque vous n'avez pas besoin d'accéder au champ sous-jacent.

Snippet , cependant, devrait généralement être évitée (sauf si vous avez des raisons spécifiques pour en avoir besoin), car les champs devraient presque toujours être privés. Si vous devez définir une autre façon de définir le champ pour les classes descendantes (ce qui est peu probable), vous pouvez utiliser des méthodes ou une autre propriété. Rappelez-vous qu'un membre protégé est essentiellement un membre public légèrement plus restreint, puisqu'il peut être accédé par le code client tant qu'il appartient à une classe descendante. Cela signifie que le code client peut être directement lié à l'implémentation de la classe plutôt qu'à son interface, ce qui est une mauvaise chose mauvaise chose!

+1

+ pour l'avertissement protégé. Les héritiers devraient être obligés d'utiliser les propriétés de la classe de base. – Will

0

Le format standard en général:

private string name; 

public string Name 
{ 
    get { return name;} 
    set { name= value; } 
} 

Les champs sera privé comme une pratique standard. Vos propriétés auront le modificateur de protection public.

11

Commencez avec le deuxième extrait, à savoir

public string Name { get; set; } 

changement à la forme du premier extrait lorsque vous avez besoin d'ajouter la validation, ou faire une certaine logique lorsque la valeur est définie.

Il faut éviter la dernière option, car elle permettrait une classe prioritaire d'accéder directement au champ de support qui vous lie à une mise en œuvre spécifique (cela signifie aussi que votre belle validation peut être contournée)

0

Révéler une propriété publique, est d'éviter l'exposition des champs publics de la classe aux consommateurs. Et les propriétés vous permettent de contrôler la façon dont les consommateurs l'utilisent (en obtenant & ensemble).

1er est un bien, dans votre 2ème échantillon (à l'aide publique & protégée) vous cassez juste que ...

0
public string Name {get;set} 

Le deuxième exemple est une propriété automatique et est généralement utilisé lorsque vous n'avez pas logique chez les getters et les setters. C'est aussi la forme courte de l'écriture du premier exemple.

Le troisième exemple a un champ de support protected, de sorte que le champ de support peut être accédé directement par une sous-classe.

Choisissez le format en fonction de votre objectif.En outre, pensez à demander aux autres membres de l'équipe s'il existe déjà un format convenu.

0

Pour la plupart des applications que j'ai écrites, si le getter et le setter ne sont pas plus compliqués que vos exemples, vous voulez probablement minimiser le code autant que possible pour la lisibilité, donc l'approche sténographique est très utile . D'un autre côté, si vous implémentez une logique plus compliquée dans les getters et les setters (par exemple la validation ou l'analyse d'une sorte), vous voulez vous assurer qu'aucune classe d'utilisateur ne contourne votre logique.

En outre, et comme Binary Worner noté dans un commentaire, cela dépend de ce que vous avez besoin, et ce que vous voulez. Vous connaissez la différence entre private, protected et public, et donc vous savez aussi ce que vous pouvez et ne pouvez pas faire avec votre classe en fonction de celui que vous choisissez. Lequel est "le meilleur" dépend entièrement du comportement que vous voulez (et ne voulez pas) autoriser d'autres classes utilisant celui-ci.

0

Ecrivez les propriétés automatiques (Nº 2) par défaut, à moins que votre getter/setter ait une sorte de logique, sinon la propriété (ou le champ) est là pour rien - vous devez accepter qu'une propriété publique accès direct son champ privé est le même qu'un champ public (ou auto-proprité).

0
#region LinkURL 

    private string _LinkURL = String.Empty; 
    public string LinkURL 
    { 
     get { return _LinkURL; } 
     set { _LinkURL = value; } 
    } 

    #endregion LinkURL 

Cette méthode est facile pour la génération de code. Par exemple, si vous avez Excel avec des propriétés ou une table db vous devrez implémenter à une classe, vous pouvez vérifier cette regex tip:

0

Comment est la meilleure pratique pour obtenir une lecture de deux propriétés par le champ ou par l'opération get ? ma propre conclusion est d'obtenir du terrain puisque c'est l'information que vous voulez manipuler, juste besoin de demander si je pense mal.

private string _key; 
    private string _subKey; 
    private string _fullKey; 

    public string SubKey 
    { 
     get 
     { 
      return _key; 
     } 
     set 
     { 
      _key = value; 
     } 
    } 

    public string SubKey 
    { 
     get 
     { 
      return _subKey; 
     } 
     set 
     { 
      _subKey = value; 
     } 
    } 

1.

public string FullKey 
{ 
get 
{ 
return _subKey + _key; 
} 
} 

2.

public string FullKey{ 
get 
{ 
return SubKey + Key 
} 
} 
Questions connexes