10
votes

C # 3.0: Propriétés automatiques - Quel serait le nom de la variable privée créée par compilateur

Je vérifiais les nouvelles fonctionnalités de .NET 3.5 et j'ai constaté qu'en C # 3.0, nous pouvons utiliser

private string name;

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


2 commentaires

Notez qu'il s'agit d'une fonctionnalité de C # 3.0, pas .NET 3.5 - Vous pouvez l'utiliser même si vous ciblez .NET 2.0 à partir d'un compilateur C # 3.0.


duplicata de est la mise en œuvre des propriétés automatiques dans la spécification? < / a>


4 Réponses :


1
votes

Si vous utilisez des propriétés automatiques, vous ne pouvez pas accéder au champ privé. Ce n'est pas seulement privé, c'est aussi anonyme.


1 commentaires

Droit. Si vous avez une raison quelconque, pensez que vous avez besoin d'accéder au membre privé (autre que vous souhaitez savoir ce qu'on appelle «de curiosité»), ne mettez pas en œuvre la propriété comme celle-ci, mais définissez votre propre membre privé. Comme "dans les vieux jours". ;-)



21
votes

réécrit pour être plus clair strong>

Le champ est généré d'accord, mais il n'est pas visible de votre code comme champ normal. p>

Voici votre propriété automatique typique: p> xxx pré>

lequel, si nous examinons l'assemblage compilé, produit ce champ de magasin de support: p> xxx pré>

notez le Dans la présente, qui ne sont pas des caractères que vous pouvez utiliser dans vos propres noms de champs. Vous ne pouvez pas non plus accéder à ce domaine, car il n'existe pas "exister" aussi loin que le compilateur se soucie, quand il regarde votre code. P>

La vraie question ici, de moi, est pourquoi vous voudriez accéder à ce domaine. En d'autres termes, pourquoi avez-vous besoin d'un accès sur le terrain et de quoi faire pour votre code qui accédant à la propriété ne fait pas? P>

Si vous souhaitez empêcher l'accès en écriture extérieure au champ, C'est facile à faire en faisant la méthode de setter privée, comme celle-ci: p> xxx pré>

Notez que, étant donné que le champ est réellement présent dans l'assembly, cela signifie que ce n'est pas la magie de la gigue, mais Compiler Magic, et vous pourriez ainsi utiliser la réflexion pour trouver et l'accès, ce champ. P>

Mais encore une fois, pourquoi voudriez-vous? P>

Maintenant, supposons qu'il y ait vraiment un Raison légitime pour que vous souhaitiez utiliser le champ, au lieu de la propriété. Je peux penser à un, bien que je le ferais probablement différemment, et ce serait que vous souhaitez transmettre le nom de champ sur une méthode de paramètre OUT ou REF, comme celui-ci: P>

AdjustName(ref string firstName); // note the field, not the property


4 commentaires

Je veux utiliser la valeur de la propriété dans une méthode qui fait des calculs mathématiques


Alors pourquoi ne pas utiliser la propriété elle-même?


La seule chose à obtenir est de retourner cette valeur spécifique;).


Désolé, j'ai oublié de dire que j'ai commenté SHYJU.



5
votes

Comme déjà dit: Vous ne pouvez pas accéder à la variable générée automatiquement (sans utiliser de mauvais trucs). Mais je suppose que vous posez cette question parce que vous voulez avoir seulement un getter, mais je veux toujours utiliser des propriétés automatiques ... non? Dans ce cas, vous pouvez utiliser celui-ci:

public string FirstName  { get; private set; }


0 commentaires