2009-07-30 6 views

Répondre

3

Non il n'y a pas moyen de le faire

2

Non La propriété est l'interface exposée (pas C# interface) pour contrôler l'accès au champ de support privé. La syntaxe spéciale introduite en C# 3 est ce qu'on appelle le "sucre syntaxique" - le compilateur le transforme en un champ privé que vous ne voyez jamais avec une propriété get/set pour y accéder.

Éditer: Les propriétés elles-mêmes ne stockent pas de données. Ils contrôlent simplement l'accès aux données stockées ailleurs, où un cas courant est dans un champ privé.

Une autre Edit: Voici la syntaxe de sucre, je fais référence à:

// When this is compiled, it actually creates a private 
// field for you, which the property accesses. 
public int MyProperty 
{ 
    get; 
    set; 
} 
1

Si vous définissez un code personnalisé pour votre setter, si simple, vous devez également définir la méthode get si vous le voulez

plus vous pouvez aller sans écrire le code personnalisé est

public String text {get; protected set} 

qui permet un accès en lecture publique et modifiction que dans vos classes et son descendant

0

Il n'y a aucun moyen de le faire lorsque vous avez une logique personnalisée à appliquer. Si vous avez une propriété simple, vous pouvez faire:

public int Foo { get; set; } 

Vous pouvez également définir les visibilités de chaque:

public int Foo { get; private set; } 
0

Vous ne pouvez pas le faire pour une propriété où vous ne définissez pas le champ de support. Lorsque vous définissez une telle propriété, le compilateur C# génère un champ private avec le nom <PropertyName>k_BackingField dans le fichier MSIL. Comme d'autres affiches l'ont fait remarquer, vous pouvez tout au plus ajuster les modificateurs d'accès sur la propriété.

Il y a quelques règles concernant cela aussi, qui sont pour la plupart bon sens:

  • Contrôle d'accès sur get et set ne peut être plus restrictive que sur la propriété. C'est-à-dire que vous ne pouvez pas avoir un PropertyName privé et lui donner un publicget ou set.
  • Vous ne pouvez pas définir à la fois get et set comme étant private lorsque la propriété est public. Au plus un attribut peut être private.

Cependant, ceci est tout le sucre syntatique fourni par le compilateur C#. Vous pouvez fournir vous-même le champ de sauvegarde et fournir vos implémentations get et set pour la propriété. Vous pouvez choisir de créer le champ de sauvegarde public.

Il n'y a qu'une différence mineure dans le code MSIL généré pour les deux cas (Le champ de sauvegarde généré comprend un attribut System.Runtime.CompilerServices.CompilerGeneratedAttribute.Il en est de même pour les méthodes get et set)

Questions connexes