48 votes

Variable publique C# en écriture à l'intérieur de la classe mais en lecture seule à l'extérieur de la classe

J'ai une classe .Net C# où je dois rendre une variable publique. J'ai besoin d'initialiser cette variable dans une méthode (pas dans le constructeur). Cependant, je ne veux pas que la variable soit modifiable par d'autres classes. Est-ce possible?

92voto

Andrew Hare Points 159332

N'utilisez pas de champ - utilisez une propriété :

 class Foo
{
    public string Bar { get; private set; }
}

Dans cet exemple, Foo.Bar est lisible partout et accessible en écriture uniquement par les membres de Foo lui-même.

En remarque, cet exemple utilise une fonctionnalité C# introduite dans la version 3 appelée propriétés automatiquement implémentées . Il s'agit d'un sucre syntaxique que le compilateur transformera en une propriété régulière dotée d'un champ de sauvegarde privé comme celui-ci :

 class Foo
{
    [CompilerGenerated]
    private string <Bar>k__BackingField;

    public string Bar
    {
        [CompilerGenerated]
        get
        {
            return this.<Bar>k__BackingField;
        }
        [CompilerGenerated]
        private set
        {
            this.<Bar>k__BackingField = value;
        }
    }
}

12voto

David Lively Points 16026
public class Foo
{
  public string Bar { get; private set; } 
}

7voto

cdhowie Points 62253

Vous devez utiliser une propriété pour cela. Si vous êtes d'accord avec une implémentation automatique de getter/setter, cela fonctionnera :

 public string SomeProperty { get; private set; }

Notez que vous ne devez pas exposer les champs comme publics de toute façon, sauf dans certaines circonstances limitées. Utilisez plutôt une propriété.

5voto

Chris Shain Points 33569

Sûr. Faites-en une propriété et rendez le setter privé :

 public Int32 SomeVariable { get; private set; }

Ensuite, pour le définir (à partir d'une méthode de la classe):

 SomeVariable = 5;

3voto

Henrik Points 1843

Utilisez une variable privée et exposez une propriété publique.

 class Person
{
  private string name;

  public string Name
  {
    get
    {
      return name;
    }
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X