Welches Problem versuchen Sie hier zu lösen? Dies ist für mich nur dann sinnvoll, wenn Sie keine kompliziertere Logik hinzufügen, als einfach den Wert aus / in ein Feld zu laden / speichern. Zu diesem Zeitpunkt würden automatisch implementierte Eigenschaften Ihren Bedarf bereits decken. Welche Art der Implementierung ist Ihrer Meinung nach so kurz, dass sich die =>Syntax lohnt, aber für automatisch implementierte Eigenschaften zu kompliziert ist?
3
Warum verwenden Sie keine Auto-Eigenschaft?
Slugster
1
Es ist nicht ungewöhnlich, dass eine Eigenschaft etwas anderem zugeordnet werden muss, wenn beispielsweise eine Schnittstelle implementiert wird. Der Ausdruck Körperstil hält die Dinge einfach kompakt.
OlduwanSteve
Antworten:
125
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.
Wenn Sie die 6.0-Syntax (public X => _x) verwenden, wird dies in 7.0 weiterhin erkannt? dh dass Sie den Getter angeben, obwohl Sie ihn nicht explizit sagen?
Kevin Victor
1
Sie haben die in der Öffentlichkeit X
Mohammad Reza Biglari
47
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:
classPerson
{
privatestaticConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();
privateint id = GetId();
publicPerson(string name) => names.TryAdd(id, name); // constructors
~Person() => names.TryRemove(id, out _); // finalizerspublicstring Name
{
get => names[id]; // gettersset => names[id] = value; // setters
}
}
@ Achilles1515 danke für die Bearbeitung, das Quell-Snippet wurde aktualisiert, um dies zu korrigieren, nachdem ich die Antwort gepostet habe. Ich habe auch den Namen der out-Variablen aktualisiert, um sie an die aktuelle Version des Quell-Snippets anzupassen.
user247702
-6
Es gibt keine solche Syntax, aber die ältere Syntax ist ziemlich ähnlich:
privateint propVar;
publicint Prop
{
get { return propVar; }
set { propVar = value; }
}
=>
Syntax lohnt, aber für automatisch implementierte Eigenschaften zu kompliziert ist?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; }
quelle
C # 7 bietet unter anderem Unterstützung für Setter:
quelle
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; }
quelle