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; } }
4 Réponses :
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. P>
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". ;-)
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> lequel, si nous examinons l'assemblage compilé, produit ce champ de magasin de support: p> notez le 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> 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
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.
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; }
Alors, comment puis-je utiliser / accéder à la variable privée, si je veux l'utiliser dans une méthode de cette classe? P> blockQuote>
Dans votre code source, vous n'avez besoin que de travailler avec l'accesseur de propriétés
person.lastname code> ou
lastname code> si vous écrivez le code à l'intérieur de la classe de personne . p>
Le compilateur créera automatiquement une variable de membre privé ou un champ de support, mais cela existe dans le CIL < / a> code. Il n'existe nulle part dans votre code source. P>
@Shyju: Je pense que vous pourriez avoir une hypothèse erronée que Visual Studio générera automatiquement un champ privé à utiliser. La génération automatique est effectuée par le compilateur et n'existe que dans le code CIL.
Si vous devez vraiment obtenir la maintien du champ privé, vous pouvez utiliser la réflexion. Mais je suis sûr que ce n'est pas ce que vous voulez,
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>