In Java, final
significa che una variabile può essere assegnata una sola volta, ma tale assegnazione può avvenire in qualsiasi punto del programma. In C#, readonly
significa che un campo può essere assegnato solo in un costruttore , che, IMO, è significativamente meno utile.C# readonly vs Java final
Come tutti sappiamo, C# è stato pesantemente influenzato dal design Java, ma questa differenza mi ha sempre lasciato perplesso come molto strano. Qualcuno sa se c'è un motivo tecnico nel CLR che ha comportato il comportamento meno utile di readonly
di C# rispetto a Java final
?
MODIFICA:
In risposta ai commenti; Vorrei sottolineare che sono ben consapevole dei vantaggi dell'immutabilità e la uso ovunque. Credo readonly
è meno utile di Java a causa di questo:
public class Foo
{
private readonly int _bar;
Foo()
{
_bar = 5;
}
}
Ops, in realtà ho bisogno di inizializzare quel valore in un metodo di supporto!
public class Foo
{
private readonly int _bar;
Foo()
{
initialize()
}
private void initialize()
{
_bar = 5; //Can't compile because of semantics of readonly
}
}
Il tuo "meno utile" è il mio "più sicuro". – Oded
Quali sono i vantaggi dell'immutabilità? Penso che troverete 'readonly' può essere significativamente utile per il compilatore. La tua domanda è intrinsecamente soggettiva. – Jodrell
Non è possibile assegnare valore a una variabile finale in qualsiasi parte del programma in java. Se si sta creando una costante finale statica, è necessario dare un valore sul posto, altrimenti se si sta creando una variabile come finale, è possibile iniziarla nel costruttore. – ankurtr