Static readonly vs const em C#: qual a diferença e o que escolher?
Olá a todos! Sou um desenvolvedor C# iniciante e fiquei confuso com dois conceitos semelhantes: `static readonly` e `const`. Ambos são usados para declarar valores imutáveis, mas não entendo quando aplicar cada um deles.
Por exemplo, estou escrevendo uma classe para trabalhar com cálculos matemáticos:
```csharp
public class MathHelper
{
public const double Pi = 3.14159;
public static readonly double E = 2.71828;
}
```
Por que não fazer ambos como constantes? Ou ambos `static readonly`? Qual é a diferença fundamental aqui?
Li que `const` é mais rápido, mas `static readonly` está de alguma forma relacionado à memória. Também ouvi que `const` só pode ser usado para tipos primitivos, enquanto `static readonly` pode ser usado para qualquer tipo. Mas não estão totalmente claras para mim as consequências práticas.
Vocês podem explicar com exemplos simples quando usar cada opção? Estou especialmente interessado no comportamento ao alterar o código em bibliotecas (DLL) — ouvi dizer que há armadilhas aqui.
Desde já agradeço pela ajuda!