>백엔드 개발 >C++ >C#에서 참조 유형을 가장 잘 비교하는 방법은 무엇입니까?

C#에서 참조 유형을 가장 잘 비교하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-07 17:42:46155검색

How to Best Compare Reference Types in C#?

C# 참조 유형 비교 모범 사례

참조 유형을 다룰 때는 일반적으로 참조보다는 값을 비교해야 합니다. 같음 연산자(==) 또는 Equals 메서드를 재정의하는 것이 일반적인 방법이지만 참조 형식을 정확하고 효율적으로 비교하기 위해 고려해야 할 다른 방법이 있습니다.

System.IEquatable 인터페이스 구현

참조 유형의 값 의미 체계(동등성은 동일함을 의미함)의 경우 System.IEquatable 인터페이스를 사용하는 것이 좋습니다. 이 인터페이스는 심층적인 값 비교를 가능하게 하는 강력한 형식의 Equals 메서드를 제공합니다. IEquatable을 구현하면 참조뿐만 아니라 개체의 실제 값에도 동등성 검사가 적용됩니다.

예:

가치 평등을 구현하는 클래스를 생각해 보세요.

<code class="language-csharp">class Point : IEquatable<Point> {
    public Point(int x, int y) => (X, Y) = (x, y);
    public int X { get; }
    public int Y { get; }

    public bool Equals(Point other) =>
        X == other.X && Y == other.Y;

    public static bool operator ==(Point lhs, Point rhs) =>
        lhs.Equals(rhs);

    public static bool operator !=(Point lhs, Point rhs) =>
        !lhs.Equals(rhs);

    public override bool Equals(object obj) =>
        Equals(obj as Point);
}</code>

객체 동일성 방법 재정의

불변 값을 나타내지 않는 참조 유형의 경우 Object 클래스에서 Equals의 기본 구현을 재정의하는 것은 권장되지 않습니다. 기본 구현은 객체 참조를 비교하지만 항상 이상적인 것은 아닙니다. 대신 깊이 값 비교를 위해 IEquatable 인터페이스를 사용하는 것이 좋습니다.

GetHashCode 재정의

참조 유형에 대한 동등성을 구현할 때 GetHashCode() 메서드를 재정의하는 것도 중요합니다. 이는 동일한 값을 가진 객체가 동일한 해시 코드를 갖도록 보장하므로 사전과 같은 해시된 컬렉션으로 작업할 때 성능이 향상됩니다.

구현 세부정보:

코드 예제에서 Equals 메서드는 null 검사를 수행한 다음 유형 검사를 수행하여 비교되는 개체가 동일한 유형인지 확인합니다. 실제 값 비교는 각 속성에 대해 수행됩니다.

GetHashCode 메서드는 HashCode.Combine() 메서드를 사용하여 X 및 Y 속성의 해시 코드를 결합하여 동일한 값을 가진 객체에 대해 일관된 해시 코드가 생성되도록 합니다.

이러한 모범 사례를 준수함으로써 개발자는 참조 유형을 효율적이고 정확하게 비교할 수 있으며 동등 연산이 객체의 의도된 의미와 일치하는지 확인할 수 있습니다.

위 내용은 C#에서 참조 유형을 가장 잘 비교하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.