C # -Eigenschaften: Wie verwende ich eine benutzerdefinierte Set-Eigenschaft ohne privates Feld?


92

Ich möchte das machen:

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

Ist es möglich, das automatisch generierte private Feld zu verwenden?
Oder muss ich es folgendermaßen implementieren:

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

2
Es gibt viele gute Diskussionen darüber in dieser SO-Frage: stackoverflow.com/questions/1277018/…
David Hall

Antworten:


103

Sobald Sie im Getter oder im Setter benutzerdefinierte Aktionen ausführen möchten, können Sie die automatischen Eigenschaften nicht mehr verwenden.


36

Sie können so etwas ausprobieren:

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

6
+1 Meiner Meinung nach tadelt diese Antwort die akzeptierte Antwort. Es werden automatische Eigenschaften verwendet. Es setzt den Setter explizit auf privat. Dies ist eine gute Sache, da der Endbenutzer oder Entwickler weiß, dass hinter der Setter-Methode wahrscheinlich mehr steckt.
ooXei1sh

Was ist der Unterschied zwischen diesem und überhaupt nicht eingestellt?
Sidhin S Thomas

2
@SidhinSThomas, das a nicht bereitstellt, private setwürde verhindern, dass die Eigenschaft von den Mitgliedern seiner Klasse festgelegt wird. es wäre streng schreibgeschützt. Sie können die Daten nur im Konstruktor festlegen.
Bondolin

15

Das ist nicht möglich. Entweder automatisch implementierte Eigenschaften oder benutzerdefinierter Code.


11

Ab C # 7 können Sie Ausdruckskörperdefinitionen für die Eigenschaften getund setAccessoren verwenden.

Sehen Sie hier mehr

private string _name;

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

4
Ich benutze immer noch ein privates Feld. Hilft dem OP nicht wirklich.
TSmith

Während dies funktioniert, ist es wie @TSmith sagt, es ist nicht das, was das OP will.
M. Ruiz

7

Es ist erforderlich, dass Sie es in Ihrem Szenario vollständig implementieren. Beide getund setmüssen entweder automatisch implementiert oder vollständig zusammen implementiert werden, keine Kombination aus beiden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.