다음을 통해 공유


ValueType.Equals(Object) 메서드

정의

이 인스턴스와 지정된 개체가 같은지 여부를 나타냅니다.

public:
 override bool Equals(System::Object ^ obj);
public override bool Equals (object obj);
public override bool Equals (object? obj);
override this.Equals : obj -> bool
Public Overrides Function Equals (obj As Object) As Boolean

매개 변수

obj
Object

현재 인스턴스와 비교할 개체입니다.

반환

obj 이 인스턴스가 동일한 형식이고 동일한 값을 나타내는지 true. 그렇지 않으면 false.

예제

다음 예제에서는 파생된 값 형식에 의해 Equals 메서드를 재정의할 수 있는 방법을 보여 줍니다.

public ref struct Complex
{
public:
   double m_Re;
   double m_Im;
   virtual bool Equals( Object^ ob ) override
   {
      if ( dynamic_cast<Complex^>(ob) )
      {
         Complex^ c = dynamic_cast<Complex^>(ob);
         return m_Re == c->m_Re && m_Im == c->m_Im;
      }
      else
      {
         return false;
      }
   }

   virtual int GetHashCode() override
   {
      return m_Re.GetHashCode() ^ m_Im.GetHashCode();
   }
};
public struct Complex
{
    public double m_Re;
    public double m_Im;

    public override bool Equals( object ob ){
        if( ob is Complex ) {
            Complex c = (Complex) ob;
            return m_Re==c.m_Re && m_Im==c.m_Im;
        }
        else {
            return false;
        }
    }

    public override int GetHashCode(){
        return m_Re.GetHashCode() ^ m_Im.GetHashCode();
    }
}
type Complex() =
    member val m_Re = 0. with get, set
    member val m_Im = 0. with get, set

    override this.Equals(ob) =
        match ob with
        | :? Complex as c ->
            this.m_Re = c.m_Re && this.m_Im = c.m_Im
        | _ -> false
        
    override this.GetHashCode() =
        this.m_Re.GetHashCode() ^^^ this.m_Im.GetHashCode()
Public Structure Complex
   Private m_Re As Double
   Private m_Im As Double
       
   Public Overloads Function Equals(ob As Object) As Boolean
      If TypeOf ob Is Complex Then
         Dim c As Complex = CType(ob, Complex)
         Return m_Re = c.m_Re And m_Im = c.m_Im
      Else
         Return False
      End If
   End Function
   
   
   Public Overloads Function GetHashCode() As Integer
      Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
   End Function

End Structure

설명

ValueType.Equals(Object) 메서드는 Object.Equals(Object) 재정의하고 .NET의 모든 값 형식에 대한 값 같음의 기본 구현을 제공합니다.

기본 구현은 현재 인스턴스의 각 필드에 Object.Equals(Object) 호출하고 obj 모든 필드가 같으면 true 반환합니다.

.NET 9 이상에서는 InlineArrayAttribute 형식에 적용되는 경우 ValueType.Equals(Object) 기본 구현이 NotSupportedException throw합니다.

중요하다

특히 값 형식에 참조 형식인 필드가 포함된 경우 Equals(Object) 메서드를 재정의해야 합니다. 이렇게 하면 성능이 향상되고 형식에 대한 같음의 의미를 더 자세히 나타낼 수 있습니다.

Windows 런타임에 대한 참고 사항

Windows 런타임 구조에서 Equals 메서드를 호출할 때 Equals재정의하지 않는 값 형식에 대한 기본 동작을 제공합니다. 이는 .NET이 Windows 런타임에 대해 제공하는 지원의 일부입니다(Windows 스토어 앱 및 Windows 런타임.NET 지원 참조). Windows 런타임 구조는 C# 또는 Visual Basic으로 작성된 경우에도 메서드를 사용할 수 없으므로 Equals재정의할 수 없습니다. 또한 Windows 런타임 자체의 구조체는 ValueType상속하지 않습니다. 그러나 C# 또는 Visual Basic 코드에서 사용할 때 ToString, EqualsGetHashCode 메서드가 있는 것처럼 보이며 .NET은 이러한 메서드에 대한 기본 동작을 제공합니다.

적용 대상