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 von dem nächsten zu tun?
public int Prop {
get => propVar;
set => propVar = value;
}
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 von dem nächsten zu tun?
public int Prop {
get => propVar;
set => propVar = value;
}
Antworten:
Erstens ist das kein Lambda, obwohl die Syntax ähnlich ist.
Es wird " ausdrucksstarke Mitglieder " genannt. Sie ähneln Lambdas, unterscheiden sich aber grundlegend. Offensichtlich können sie lokale Variablen nicht wie Lambdas erfassen. Im Gegensatz zu Lambdas sind sie auch über ihren Namen zugänglich :) Sie werden dies wahrscheinlich besser verstehen, wenn Sie versuchen, eine Eigenschaft mit Ausdruckskörper als Delegat zu übergeben.
In C # 6.0 gibt es keine solche Syntax für Setter, aber C # 7.0 führt sie ein .
private int _x;
public int X
{
get => _x;
set => _x = value;
}
C # 7 bietet unter anderem Unterstützung für Setter:
Mehr ausdrucksstarke 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 Finalisierer 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 } }
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; }
=>
Syntax lohnt, aber für automatisch implementierte Eigenschaften zu kompliziert ist?