In der Vergangenheit haben wir Eigenschaften wie folgt deklariert:
public class MyClass
{
private int _age;
public int Age
{
get{ return _age; }
set{ _age = value; }
}
}
Jetzt können wir tun:
public class MyClass
{
public int Age {get; set;}
}
Meine Frage ist, wie kann ich auf die private Variable zugreifen, die automatisch mit dieser Notation erstellt wird?
Ich würde lieber auf die private Variable zugreifen und nicht auf den öffentlichen Accessor 'Age'. Gibt es eine Standardnotation für den Zugriff auf die private Variable oder ist dies einfach nicht möglich?
c#
properties
öffentliche statische
quelle
quelle
Antworten:
Das Ziel der neuen automatischen Eigenschaften ist es, die Menge an Boilerplate-Code zu reduzieren, die Sie schreiben müssen, wenn Sie nur eine einfache Eigenschaft haben, die keine spezielle Logik in get oder set benötigt.
Wenn Sie auf das private Mitglied zugreifen möchten, das diese Eigenschaften verwenden, hat dies normalerweise einige Gründe:
Sie möchten nur öffentlichen Lesezugriff (dh nur ein 'get') und die Klasse schreibt direkt in das Mitglied. In diesem Fall können Sie einen privaten Satz in Ihrer automatischen Eigenschaft verwenden. dh
public class MyClass { public int Age {get; private set;} }
Dies deckt normalerweise die meisten Gründe ab, warum Sie direkt zu dem von den automatischen Eigenschaften verwendeten Hintergrundfeld gelangen möchten.
quelle
Ihre Verwendung automatischer Eigenschaften impliziert, dass Sie keine Abruf- / Einstellungslogik für die Eigenschaft benötigen, sodass eine private Sicherungsvariable nicht erforderlich ist.
Verwenden Sie keine automatischen Eigenschaften, wenn Ihre Klasse eine komplexe Logik enthält. Gehen Sie einfach
private int _age
und normale Getter / Setter, wie Sie es normalerweise tun würden.IMO, automatische Eigenschaften eignen sich besser für die schnelle Implementierung von Wegwerfobjekten oder temporären Datenkapseln wie:
public class TempMessage { public int FromID { get; set; } public int ToID { get; set; } public string Message { get; set; } }
Wo Sie nicht viel Logik brauchen.
quelle
Diese Syntax wird allgemein als "Syntaxzucker" bezeichnet, was bedeutet, dass der Compiler diese Syntax verwendet und in etwas anderes übersetzt. In Ihrem Beispiel würde der Compiler Code generieren, der ungefähr so aussieht:
[CompilerGenerated] private int <Age>k_BackingField; public int Age { [CompilerGenerated] get { return this.<Age>k_BackingField; } [CompilerGenerated] set { this.<Age>k_BackingField = value; }
Selbst wenn Sie all das wissen, könnten Sie wahrscheinlich direkt auf das Hintergrundfeld zugreifen, aber diese Art von macht den Zweck der Verwendung automatischer Eigenschaften zunichte. Ich sage hier wahrscheinlich, weil Sie dann auf ein Implementierungsdetail angewiesen sind, das sich zu einem beliebigen Zeitpunkt in einer zukünftigen Version des C # -Compilers ändern könnte.
quelle
Ab C # 3.0 Automatische Eigenschaften erklärt
Obwohl es möglich sein kann, dieses private Mitglied direkt zu verwenden, ist es sehr hackig und unnötig.
quelle
Sie sollten nicht, und es ist sehr unwahrscheinlich, dass Sie müssen. Wenn Sie auf die Eigenschaft zugreifen müssen, verwenden Sie einfach die öffentliche Eigenschaft (z. B. this.Age). Das private Feld, das das öffentliche Eigentum unterstützt, hat nichts Besonderes. Es ist nur Aberglaube, es dem Eigentum vorzuziehen.
quelle
Sie können nicht, es ist eine Sprachfunktion im Gegensatz zu einer IDE-Funktion. Um ehrlich zu sein, würde ich es vorziehen, wenn IDE die private Variable für Sie hinzufügt. Ich stimme zu, dass es etwas seltsam ist, wenn die Klasse intern den öffentlichen Einstiegspunkt verwenden muss, um auf ihre eigenen Variablen zuzugreifen. Daher benutze ich diese neue Funktion selbst nicht so oft.
quelle