Propriétés C #: comment utiliser la propriété d'ensemble personnalisée sans champ privé?


93

Je veux faire ça:

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

Est-il possible d'utiliser le champ privé généré automatiquement?
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
Il y a beaucoup de bonnes discussions à ce sujet à cette question SO: stackoverflow.com/questions/1277018/…
David Hall

Réponses:


102

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.


37

Vous pouvez essayer quelque chose comme ceci:

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

6
+1 À mon avis, cette réponse réfute la réponse acceptée. Il utilise les propriétés automatiques. Il définit explicitement setter sur private. C'est une bonne chose car cela permet à l'utilisateur final ou au développeur de savoir qu'il se passe probablement plus derrière la méthode setter.
ooXei1sh

Quelle est la différence entre cela et ne pas avoir pris du tout?
Sidhin S Thomas

3
@SidhinSThomas ne pas fournir de a private setempêcherait la propriété d'être définie par les membres de sa classe; ce serait strictement en lecture seule. Vous ne pourrez définir ses données que dans le constructeur.
Bondolin

15

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


11

À partir de C # 7, vous pouvez utiliser des définitions de corps d'expression pour la propriété getet les setaccesseurs.

En savoir plus ici

private string _name;

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

4
J'utilise toujours un champ privé. N'aide pas vraiment l'OP.
TSmith

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

7

Il est nécessaire que vous l'implémentiez pleinement compte tenu de votre scénario. Les deux getet setdoivent être soit mis en œuvre automatiquement, soit entièrement mis en œuvre ensemble, et non une combinaison des deux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.