130 votes

Les propriétés C# : comment utiliser une propriété définie personnalisée sans champ privé ?

Je veux faire ceci :

public Name
{
    get;
    set
    {
        dosomething();
        ??? = value
    }
}

Est-il possible d'utiliser le champ privé auto-généré ?
Ou est-il nécessaire que je l'implémente de cette façon :

private string name;
public string Name
{
    get
    {
        return name;
    }
    set
    {
        dosomething();
        name = value
    }
}

2 votes

Il y a beaucoup de bonnes discussions à ce sujet sur cette question SO : stackoverflow.com/questions/1277018/…

147voto

BrokenGlass Points 91618

Une fois que vous voulez faire quelque chose de personnalisé dans le getter ou le setter, vous ne pouvez plus utiliser les propriétés automatiques.

46voto

brutjan Points 11

Vous pouvez essayer quelque chose comme ceci :

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}

8 votes

+1 À mon avis, cette réponse réfute la réponse acceptée. Elle utilise des propriétés automatiques. Elle définit explicitement le setter en privé. C'est une bonne chose car cela permet à l'utilisateur final ou au développeur de savoir qu'il y a probablement plus de choses se passent derrière la méthode du setter.

0 votes

Quelle est la différence entre cela et ne pas l'avoir du tout ?

7 votes

@SidhinSThomas ne pas fournir un private set empêcherait la propriété d'être définie par les membres de sa classe; elle serait strictement en lecture seule. Vous ne seriez en mesure de définir ses données que dans le constructeur.

22voto

Colin Banbury Points 410

À partir de C# 7, vous pouvez utiliser des définitions de corps d'expression pour les accesseurs get et set de la propriété.

Voir plus ici

private string _name;

public string Name
{
    get => _name;
    set
    {
        FaireQuelqueChose();
        _name = value;
    }
}

11 votes

Encore en utilisant un champ privé cependant. N'aide pas vraiment l'OP.

1 votes

Pendant que cela fonctionne, c'est comme le dit @TSmith, ce n'est pas ce que l'OP veut.

17voto

Femaref Points 41959

Ce n'est pas possible. Soit des propriétés implémentées automatiquement, soit du code personnalisé.

10voto

Jeff Yates Points 36725

Il est nécessaire que vous l'implémentiez pleinement compte tenu de votre scénario. get et set doivent être soit entièrement implémentés de manière automatique, soit entièrement implémentés ensemble, et non pas une combinaison des deux.

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