다음과 같은 객체를 갖는 것이 유용 할 수있는 시나리오가 있지만 서로 다른 유형은 서로 동등하다고보고합니다. 그런 용도에 대해 강력히 권장합니다. 가능한 한 정당하다고 여겨 질 수있는 유일한 시간은 다양한 가상 메서드를 사용하는 봉인 된 Equals
메서드를 포함하는 공통 기본 클래스에서 상속 된 모든 유형이 지원하는 긴급 평등 비교 방법을 개체에 요청하면 최상의 사용 가능한 방법이며 급송 방법을 사용할 수없는 경우 객체를 표준 형식으로 변환하여 비교합니다.
예를 들어, 인수가 두 개인 색인화 된 속성 가져 오기 도구를 구현하는 추상 형식 ImmutableFloatingPointMatrix
을 고려하십시오. 두 개의 행렬은 크기가 같고 동일한 위치에 동일한 값을 갖는 경우 같아야합니다. 파생 클래스가 2 차원 배열을 사용하여 행렬의 내용을 유지하는 것은 가능하지만 다른 많은 저장 방법이 가능합니다. 예를 들어, 필드가 하나 인 구체 IdentityMatrix
클래스는 항상 Size
x이라는 차원을보고하며 주 대각선의 셀에는 1.0을 반환하고 다른 곳에서는 0.0을 반환하는 인덱스 속성을가집니다. 하나는 Size
- 항목 배열을 사용하여 대각선에 물건을 넣을 수있는 DiagonalMatrix
을 가질 수 있습니다. 임의의 2 개의 행렬은 대응하는 모든 요소를 검사함으로써 동등성을 비교할 수 있지만, 예를 들어, IdentitymMatrix
에 대한 DiagonalMatrix
은 두 행렬이 동일한 크기이고 배열의 모든 항목이 1.0이되도록 보장함으로써 더 잘 처리 될 수 있습니다 (주 대각선 바깥에있는 점을 확인하지 않아도 됨).
Equals
의 의미가 현저하게 정의되어 유형이 다른 객체가 자신을 동일하다고보고하는 유형 인 경우에도 최상의 아이디어는 아닐 수 있습니다. 사용자 정의 EqualityComparer
을 사용할 수있는 경우에는 Equals
의 이상한 재정의보다 나을 수 있습니다.