C'è qualche differenza interna tra il C# modo zucchero sintattico di fare proprietà:È OK usare una variabile pubblica in C# se è in sola lettura?
public string FirstName { get; set; }
e solo facendo le variabili pubbliche in questo modo:
public string LastName;
Suppongo che il primo modo è preferito e il secondo a essere evitato. Tuttavia, vedo spesso questo tipo di proprietà di sola lettura in uso che è una forma del secondo tipo di cui sopra:
public readonly string InternalCode;
È questo il modo in cui un best-practice per creare proprietà di sola lettura?
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();
}
}
}
quell'articolo era un due pagine che rispondevano direttamente alla mia domanda, grazie! Capisco da ciò che Jon non approverebbe nemmeno "public publicallyly bool IsValid;" a meno che, come cita alla fine, sia in una classe nidificata –
Per quelli di noi che cercano solo una risposta e non un lungo articolo, potresti aggiungere un avviso di spoiler qui e darci la risposta sì o no? – DOK
L'articolo Skeet fa in realtà un paio di eccezioni, una delle quali potrebbe essere applicata a questa domanda. Secondo l'articolo, "farò una piccola eccezione per i campi statici di sola lettura come string.Empty". Questa domanda avrebbe potuto essere modificata e spostando l'assegnazione dal costruttore sulla stessa riga sarebbe statico public readonly stringa InternalCode = "234729834723984"; In quanto tale, sarebbe un "campo statico di sola lettura" proprio come descritto da Skeet. – John