web-dev-qa-db-de.com

Lambda für Getter und Setter des Eigentums

In C # 6.0 kann ich schreiben:

public int Prop => 777;

Aber ich möchte Getter und Setter verwenden. Gibt es eine Möglichkeit, etwas wie das nächste zu tun?

public int Prop {
   get => propVar;
   set => propVar = value;
}
45
Deni35

Erstens ist das kein Lambda, obwohl die Syntax ähnlich ist.

Es heißt " ausdrucksstarke Mitglieder ". Sie ähneln Lambdas, unterscheiden sich jedoch grundlegend. Offensichtlich können sie keine lokalen Variablen erfassen, wie es Lambdas tun. Im Gegensatz zu Lambdas sind sie auch über ihren Namen zugänglich :) Sie werden dies wahrscheinlich besser verstehen, wenn Sie versuchen, eine Eigenschaft mit Ausdruck als Delegat zu übergeben.

In C # 6.0 gibt es keine solche Syntax für Setter, aber in C # 7.0 wird sie eingeführt .

private int _x;
public X
{
    get => _x;
    set => _x = value;
}
87

C # 7 unterstützt unter anderem Setter:

Mehr Ausdruck, körperreiche Mitglieder

Ausdrucksmethoden, -eigenschaften usw. sind in C # 6.0 ein großer Erfolg, aber wir haben sie nicht für alle Arten von Mitgliedern zugelassen. C # 7.0 fügt der Liste der Dinge, die Ausdruckskörper haben können, Accessoren, Konstruktoren und Finalizer hinzu:

class Person
{
    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();
    private int id = GetId();

    public Person(string name) => names.TryAdd(id, name); // constructors
    ~Person() => names.TryRemove(id, out _);              // finalizers
    public string Name
    {
        get => names[id];                                 // getters
        set => names[id] = value;                         // setters
    }
}
34
user247702

Es gibt keine solche Syntax, aber die ältere Syntax ist ziemlich ähnlich:

    private int propVar;
    public int Prop 
    {
        get { return propVar; }
        set { propVar = value; }
    }

Oder

public int Prop { get; set; }
0