Na declaração abaixo, porque usar o readonly?
private readonly Stack<string> historicoAnterior = new Stack<string>();
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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).