Il mio progetto contiene un numero elevato di classi con proprietà il cui campo di supporto è contrassegnato in sola lettura in quanto sono impostati solo in fase di costruzione. Per questioni di stile, mi piace usare le proprietà automatiche poiché elimina un sacco di codice di codice e incoraggia l'uso del membro della proprietà piuttosto che del campo di supporto. Tuttavia, quando si utilizza una proprietà automatica, perdo la "readonlyness" del mio campo di supporto. Capisco il compilatore/runtime è in grado di approfittare di alcuni miglioramenti delle prestazioni quando un campo è contrassegnato in questo modo, quindi mi piacerebbe essere in grado di marcare la mia auto-proprietà come sola lettura, qualcosa di simile:È possibile forzare una proprietà automatica per utilizzare un campo di backup di sola lettura?
[ReadOnly]
public string LastName { get; }
piuttosto che
private readonly string _LastName;
public string LastName
{
get
{
return _LastName;
}
}
C'è qualche meccanismo già disponibile per farlo? In caso contrario, il guadagno prestazionale dal backing field personalizzato è di sola lettura davvero utile?
L'esposizione del campo come pubblica è un'altra opzione, suppongo, non sembra giusto esporre un campo in questo modo. vale a dire
public readonly string LastName;
Sono d'accordo che sembra sbagliato esporre un campo pubblico di sola lettura. Se dovesse mai essere necessario passare a una proprietà in un secondo momento, la modifica comprometterebbe la compatibilità. –
Come hanno correttamente notato le risposte, no, non c'è modo di farlo adesso. Questa è una funzionalità richiesta frequentemente ed è sicuramente in cima alla lista di possibili nuove funzionalità per ipotetiche versioni future della lingua. Personalmente mi piacerebbe avere un intero set di funzionalità correlate che incoraggiano la programmazione in uno stile immutabile; questo sarebbe solo uno di loro. –