Equals 및 같음 연산자(==) 구현 지침
다음 규칙은 Equals 메서드와 같음 연산자(==)를 구현하기 위한 지침을 요약한 것입니다.
Equals 메서드를 구현할 때마다 GetHashCode 메서드를 구현합니다. 이렇게 하면 Equals와 GetHashCode가 동기화됩니다.
같음 연산자(==)를 구현할 때마다 Equals 메서드를 재정의하고 같은 동작을 수행하도록 만듭니다. 이렇게 하면 Equals 메서드를 사용하는 Hashtable 및 ArrayList 등의 인프라 코드가 같은 연산자를 사용하여 작성된 사용자 코드와 같은 방식으로 동작하게 됩니다.
IComparable을 구현할 때마다 Equals 메서드를 재정의합니다.
IComparable을 구현할 때는 같음(==), 같지 않음(!=), 보다 작음(<) 및 보다 큼(>) 연산자에 대한 연산자 오버로드를 구현할 수 있습니다.
Equals 또는 GetHashCode 메서드나 같음 연산자(==)에서 예외를 throw하지 않습니다.
Equals 메서드에 대한 관련 내용은 Equals 메서드 구현을 참조하십시오.
값 형식에 같음 연산자(==) 구현
대부분의 프로그래밍 언어에서는 값 형식에 대해 기본 구현된 같음 연산자(==)가 없습니다. 따라서 같음이 의미가 있을 때마다 같음 연산자(==)를 오버로드해야 합니다.
값 형식에 대해서는 Equals 메서드의 구현을 고려해야 합니다. 이것은 System.ValueType에 대한 기본 구현과 사용자 지정 구현에서는 이를 구현하지 않기 때문입니다.
Equals 메서드를 재정의할 때마다 같음 연산자(==)를 구현합니다.
참조 형식에 같음 연산자(==) 구현
대부분의 언어에서는 참조 형식에 대해 기본 구현된 같음 연산자(==)를 제공하지 않습니다. 따라서 참조 형식에 대해 같음 연산자(==)를 구현할 때는 주의해야 합니다. Equals 메서드를 구현하는 참조 형식을 포함한 대부분의 참조 형식은 같음 연산자(==)를 재정의해서는 안 됩니다.
해당 형식이 Point, String, BigNumber 등과 같은 기본 형식인 경우 같음 연산자(==)를 재정의합니다. 더하기(+) 및 빼기(-) 연산자를 오버로드할 때는 항상 같음 연산자(==)도 오버로드해야 합니다.
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.