In generale, sì, usare i campi pubblici invece delle proprietà è una cattiva pratica.
Il framework .NET in genere assume che userete le proprietà invece dei campi pubblici. Ad esempio, il collegamento dati cerca le proprietà per nome:
tbLastName.DataBindings.Add("Text", person, "LastName"); // textbox binding
Ecco alcune cose che puoi fare facilmente con le proprietà ma non con i campi:
-
Puoi aggiungere una validazione (o qualsiasi altro codice, entro limiti ragionevoli) ai valori di una proprietà:
private string lastName;
public string LastName
{
get { return lastName; }
set
{
if(string.IsNullOrEmpty(value))
throw new ArgumentException("LastName cannot be null or empty");
lastName = value;
}
}
-
Puoi modificare facilmente i livelli di accessibilità per getter e setter:
public string LastName { get; private set; }
-
Puoi utilizzarli come parte di una definizione di interfaccia o di una classe astratta.
Se inizi con i campi pubblici e ritieni che sarà facile passare alle proprietà in seguito, probabilmente incontrerai dei problemi. Se si dispone di un codice in altri assembly che dipende dall'accesso ai campi pubblici, sarà necessario ricostruirlo e ridistribuirli tutti se si passa all'accesso basato su proprietà. Potresti anche avere un codice che usa la riflessione per ottenere i valori ... anche questo dovrebbe essere cambiato.
E se sei veramente sfortunato, quei cambiamenti dovrebbero essere fatti in una parte della base di codice su cui non hai alcun controllo e sarai bloccato a hackerare nei campi pubblici.
Per ulteriori dettagli sanguinosi, consulta l'articolo 1 nel primo capitolo di C # efficace di Bill Wagner.