문제

DLL 에서이 열거 형을 상상해보십시오.

public enum Colors
{
    Red,
    Green
}
.

enum 값을 추가하는 것은 바이너리 호환성을 중단합니까?내가 그것을 바꾸려면 기존의 exes가 휴식을 취할 것입니까?

public enum Colors
{
    Red,
    Green,
    Blue
}
.

나는 이 답변 삽입 의 경우를 해결하는 것처럼 보였습니다.에 대한 값을 에 추가하는 경우

입니다.

도움이 되었습니까?

해결책

아니오, 이는 기본적으로 정수적 인 리터럴 상수이기 때문에 이것은 바이너리 호환성 (어셈블리가 여전히로드됩니다)이 이진 호환성을 끊지 않습니다.중간에 값을 삽입하는 것은 분명히 정말로 위험한 아이디어이지만 이미 제외되었습니다.

그러나, 당신이 보호해야 할 다른 많은 문제가 발생할 수 있습니다 :

  • 일부 코드 (특히 switch 문)는 새로운 값을 기대하지 않을 수 있습니다.기술적으로 이것은 enums가 가치 확인 (enum 변수를 포함 할 수 있음)
  • 에 대해서도 eNums가 없으므로이 문제가 발생했습니다.
  • 사용 가능한 열거가 다른 결과가 다른 결과를 얻을 것입니다.
    • 특정 클라이언트
    • 에 의해 아직 예상되지 않는 열거 형을 사용하는 데이터가있는 경우 특히 직렬화 및 deserialization이 예기치 않게 실패 할 수 있습니다.

다른 팁

끝까지 덧셈을한다고 가정하면 괜찮습니다.그러나, 부서지는 위험은 enum 값이 암시 적으로 정의되면 0으로 시작한다는 사실에서 나옵니다. 따라서 누군가가 DB에 값을 지속되면 그들이 맵하는 값을 변경하는 위험이 있습니다.

예를 들어, enum을 변경 한 경우 :

public enum Colors
{
    Blue,
    Red,
    Green
}
.

DBS 에이 값을 저장 한 사람은 한 번 빨간색이었던 것들이 푸른 색이며 녹색은 지금 녹색이었습니다.

이상적으로, 당신은 당신의 열거움을 그렇게 정의해야합니다 :

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

그리고 새 하나를 추가하면 다음이 있어야합니다.

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

잠재적 인 버전 관리 문제를 예방하는 데 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top