Proprietà C #: come utilizzare la proprietà del set personalizzato senza campo privato?


93

Voglio farlo:

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

È possibile utilizzare il campo privato generato automaticamente?
O è necessario che lo implementi in questo modo:

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

2
Ci sono molte buone discussioni su questo a questa domanda SO: stackoverflow.com/questions/1277018/…
David Hall

Risposte:


102

Una volta che vuoi fare qualcosa di personalizzato nel getter o nel setter, non puoi più usare le proprietà automatiche.


37

Puoi provare qualcosa di simile:

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

6
+1 Secondo me questa risposta rimprovera la risposta accettata. Utilizza le proprietà automatiche. Imposta esplicitamente setter su privato. Questa è una buona cosa perché consente all'utente finale o allo sviluppatore di sapere che probabilmente c'è molto altro dietro il metodo setter.
ooXei1sh

Qual è la differenza tra questo e il non aver impostato affatto?
Sidhin S Thomas,

3
@SidhinSThomas non fornendo a private setimpedirebbe che la proprietà venga impostata dai membri della sua classe; sarebbe rigorosamente di sola lettura. Saresti in grado di impostare i suoi dati solo nel costruttore.
Bondolin

15

Non è possibile. Proprietà implementate automaticamente o codice personalizzato.


11

A partire da C # 7, è possibile usare le definizioni del corpo dell'espressione per la proprietà gete le funzioni di setaccesso.

Vedi di più qui

private string _name;

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

4
Tuttavia, utilizzo ancora un campo privato. Non aiuta davvero l'OP.
TSmith

Anche se funziona, è come dice @TSmith, non è quello che vuole l'OP.
M. Ruiz

7

È necessario implementarlo completamente in base al proprio scenario. Entrambi gete setdevono essere implementati automaticamente o completamente implementati insieme, non una combinazione dei due.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.