Gibt es eine interne Differenz zwischen der C# syntaktischen Zucker Art der Eigenschaften:Ist es in Ordnung, eine öffentliche Variable in C# zu verwenden, wenn es schreibgeschützt ist?
public string FirstName { get; set; }
und nur öffentliche Variablen wie folgt zu machen:
public string LastName;
Ich nehme an, die erste Art und Weise bevorzugt wird und die zweiter zu Gemieden werden. Allerdings sehe ich oft diese Art von Nur-Lese-Eigenschaft wird verwendet, die eine Form des zweiten Typs ist oben:
public readonly string InternalCode;
Ist das eine Best-Practice-Weg Nur-Lese-Eigenschaft zu erstellen?
using System;
namespace TestProps
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
customer.FirstName = "Jim";
customer.LastName = "Smith";
customer.Show();
}
}
class Customer
{
public string FirstName { get; set; } //prefered
public string LastName; //avoid
public readonly string InternalCode; //???
public Customer()
{
InternalCode = "234729834723984";
}
public void Show()
{
Console.WriteLine("{0}, {1} ({2})", LastName, FirstName, InternalCode);
Console.ReadLine();
}
}
}
Dieser Artikel war ein zwei Seiten direkt auf meine Frage, danke! Ich verstehe daraus, dass Jon nicht einmal "public readonly bool IsValid" genehmigte; es sei denn, wie er am Ende erwähnt, ist es in einer verschachtelten Klasse –
Für diejenigen von uns nur auf der Suche nach einer Antwort und nicht ein langer Artikel, könnten Sie hier einen Spoiler-Alarm hinzufügen und geben Sie uns die Ja oder Nein-Antwort? – DOK
Der Skeet-Artikel macht tatsächlich ein paar Ausnahmen, von denen eine auf diese Frage angewendet werden könnte. Gemäß dem Artikel "mache ich eine kleine Ausnahme für statische schreibgeschützte Felder wie string.Empty". Diese Frage könnte geändert worden sein, und durch Verschieben der Zuweisung vom Konstruktor auf dieselbe Zeile wäre public static readonly string InternalCode = "234729834723984"; Als solches wäre es ein "statisches Readonly-Feld" wie Skeet beschrieben. – John