Pergunta

Imagine este enum em uma DLL.

public enum Colors
{
    Red,
    Green
}

Adicionar valores enum quebra a compatibilidade binária?Se eu mudasse, os EXEs existentes quebrariam?

public enum Colors
{
    Red,
    Green,
    Blue
}

Eu vi esta resposta, mas parecia abordar o caso de inserindo um valor.Se eu adicionar valores a o fim apenas, está tudo bem?

Foi útil?

Solução

Não, isso não quebra a compatibilidade binária (na medida em que:o assembly ainda será carregado, etc.), porque enums são basicamente constantes literais inteiras.Inserir valores no meio é obviamente uma ideia muito perigosa, mas você já excluiu isso.

No entanto, isso pode causar uma série de outros problemas contra os quais você precisa se proteger:

  • algum código (switch declarações em particular) podem não antecipar os novos valores;tecnicamente, isso também era um problema antes, já que enums não são verificados por valor (variáveis ​​enum podem conter valores indefinidos)
  • qualquer coisa que consulte as enumerações disponíveis obterá resultados diferentes
    • em particular, a serialização e a desserialização poderão falhar inesperadamente se houver dados usando enums que ainda não são esperados pelo cliente específico

Outras dicas

Deve ficar tudo bem, supondo que você acrescente apenas no final.Porém, o risco de quebra viria do fato de os valores enum serem definidos implicitamente, começando em 0.Portanto, se alguém persistir os valores em um banco de dados, você corre o risco de alterar os valores para os quais eles mapeiam.

Por exemplo, se você alterou seu enum para:

public enum Colors
{
    Blue,
    Red,
    Green
}

Qualquer pessoa que armazenasse esses valores em seus bancos de dados veria que coisas que antes eram vermelhas, agora são azuis, e o que era verde agora é vermelho.

Idealmente, você deve definir seu enum assim:

public enum Colors
{
    Red = 0,
    Green = 1
}

E então, ao adicionar um novo, você deverá ter:

public enum Colors
{
    Red = 0,
    Green = 1,
    Blue = 2
}

Isso ajudará a evitar possíveis problemas de versão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top