Qual é a diferença entre const e readonly em C#? Quando usar cada um?
Olá a todos! Comecei a estudar C# e me deparei com dois modificadores que me parecem muito semelhantes: `const` e `readonly`. Eu entendo que ambos tornam uma variável imutável, mas sinto que deve haver alguma diferença fundamental entre eles que estou perdendo.
Aqui está um exemplo simples que escrevi:
```csharp
public class MyClass
{
public const int MyConst = 10;
public readonly int MyReadonly = 20;
public MyClass()
{
MyReadonly = 30; // Isso funciona
// MyConst = 40; // Erro: constante não pode ser alterada
}
public void SomeMethod()
{
// MyReadonly = 50; // Erro: campo readonly só pode ser alterado no construtor
}
}
```
Eu vejo que o campo `readonly` pode ser alterado no construtor, mas `const` não. Mas existem outras diferenças? Por exemplo, ouvi dizer que `const` é um valor estático por natureza, enquanto `readonly` pode ser diferente para diferentes instâncias. Como isso funciona no nível do compilador?