Na declaração abaixo, porque usar o readonly
?
private readonly Stack<string> historicoAnterior = new Stack<string>();
Na declaração abaixo, porque usar o readonly
?
private readonly Stack<string> historicoAnterior = new Stack<string>();
Olá, Diego
Com o modificador readonly
, o campo historicoAnterior
fica imutável e assim os únicos lugares onde podemos defini-lo são na declaração do campo ou no construtor da classe. Se tentarmos chamar uma instrução como historicoAnterior = new Stack<string>();
em outro método (por exemplo em NavegarPara
), tomaremos um erro.
Porém, se omitirmos o readonly
isso não vai afetar o exemplo da aplicação da aula. É apenas uma técnica de programação defensiva.
Então com o Readonly
eu garanto que o atributo pode ser manipulado apenas pelo construtor da classe ou pelos métodos da classe? Seria similar ao resultado obtido com a lista somente leitura que ensinou no curso?
Com o modificador readonly
você não consegue modificar (atribuir um valor a) um campo em nenhum método ou propriedade, apenas na declaração do campo ou dentro do construtor.
A lista somente-leitura é duplamente protegida contra modificação: contra alterações externas aos elementos da coleção (com o ReadOnlyCollection
) e contra alterações internas na instância da coleção em si (com o readonly
).