É importante entender os conceitos de programação em C # antes de prosseguir com a implementação do código. Antes de passarmos para as diferenças entre const e readonly, vamos entender primeiro as palavras-chave e como elas são usadas em um programa. Ambas são as palavras-chave mais comuns usadas na programação C # e basicamente para o mesmo objetivo. No entanto, as duas palavras-chave são muito diferentes umas das outras. Const é uma palavra reservada usada para representar valores constantes e especifica que um valor não pode ser modificado após o tempo de compilação, enquanto readonly é um modificador que pode ser usado em campos e cujo valor pode ser alterado durante o tempo de execução. Vamos dar uma olhada em algumas das principais diferenças entre const e readonly.
Const refere-se a uma variável constante e cujo valor precisa ser atribuído apenas uma vez, durante a declaração. Quando a palavra-chave const é usada durante uma declaração, ela se torna um significado constante, o valor permanece constante e não pode ser alterado ao longo do programa. É mais uma palavra reservada que especifica que um valor não deve ser modificado após o tempo de compilação. Uma const é implicitamente estática por padrão, portanto, pode ser chamada com o nome da classe usando "Classname.VariableName". Os valores constantes também são chamados como literais. Pode ser de qualquer tipo de dados básico, como uma constante inteira, uma const flutuante ou uma string literal.
A palavra-chave Readonly é um modificador que pode ser usado apenas em campos, mas não em variáveis locais. Um campo somente leitura pode ser inicializado no momento da declaração ou dentro de um construtor da mesma classe, portanto, os valores podem ser diferentes para diferentes execuções do programa, dependendo do construtor usado. A palavra-chave readonly especifica que uma variável de instância de um objeto não é modificável e qualquer tentativa de modificá-lo após a declaração resulta em erro de compilação. A variável não se torna não modificável até depois da execução. As variáveis são criadas somente para leitura, para impedir que o código seja modificado acidentalmente após a construção.
A palavra-chave constante (const) não passa de variáveis imutáveis, cujo valor só pode ser inicializado no momento da compilação. Esses valores constantes também são chamados como literais. Simplesmente nos permite especificar se uma variável é modificável ou não. Em termos simples, as constantes são implicitamente estáticas e devem ser inicializadas antes de serem usadas no programa. A palavra-chave somente leitura, por outro lado, é um modificador que pode ser usado em campos e cujo valor pode ser alterado durante o tempo de execução. Impede a alteração de campos e os valores podem ser definidos através de variáveis de referência.
Uma const é estática por padrão e os valores para os quais devem ser atribuídos no momento da declaração da variável, o que significa que os valores são atribuídos apenas no tempo de compilação. Uma constante é declarada usando a palavra-chave "const". A inicialização de um campo constante deve ser uma expressão constante e não pode ser modificada. Simplificando, uma const é uma constante em tempo de compilação. Um campo somente leitura, por outro lado, só pode ser inicializado no nível da classe que não está dentro do método e o campo não pode ser modificado após a inicialização. Em outras palavras, variáveis somente leitura podem ser inicializadas no momento da declaração ou dentro de um construtor.
Um valor const é colocado diretamente no código, pois atua como a substituição em tempo de compilação. O compilador coloca o valor constante nos metadados do assembly que define a constante e incorpora o valor no próprio código IL após a inicialização, portanto, não é necessária memória para constantes no tempo de execução para alocação. O valor somente leitura não é constante e é armazenado no heap do carregador cuja memória não pode ser alocada até que seu tipo seja carregado. Os campos somente leitura são armazenados na memória dinâmica para que os valores possam ser obtidos apenas em tempo de execução.
Embora ambas as palavras-chave sejam usadas quase com a mesma finalidade, elas têm semânticas diferentes de versão binária. Quando uma expressão faz referência a uma constante, o compilador incorpora o valor no tempo de compilação. Portanto, se o valor for usado em uma montagem diferente, a montagem original precisará ser atualizada e o valor deve ser alterado. As alterações na montagem não são refletidas até serem recompiladas. O valor não é obtido até o tempo de execução, quando uma expressão faz referência a um campo somente leitura. Se o valor for alterado em uma montagem diferente, as alterações serão refletidas na montagem assim que forem carregadas, sem a necessidade de recompilar..
As duas palavras-chave são usadas para a mesma coisa que é declarar um membro para que os valores não possam ser alterados ao longo do programa. No entanto, a palavra-chave const é muito diferente da palavra-chave readonly. Const é uma variável constante cujo valor deve ser inicializado no tempo de compilação, enquanto um campo somente leitura pode ser inicializado apenas no nível da classe, no momento da declaração ou dentro do construtor. Const é uma constante em tempo de compilação, enquanto os campos somente leitura são somente leitura. As variáveis Constance podem ser acessadas usando "Classname.VariableName", enquanto as variáveis somente leitura podem ser acessadas usando "InstanceName.VariableName". Além disso, variáveis const podem ser declaradas em métodos, enquanto campos somente leitura não podem ser declarados em métodos.