# ValueType.Equals(Object) Método

## Definição

Indica se essa instância e um objeto especificado são iguais.

``````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``

#### Parâmetros

obj
Object

O objeto a ser comparado com a instância atual.

#### Retornos

`true` se `obj` e essa instância forem do mesmo tipo e representarem o mesmo valor; caso contrário, `false`.

## Exemplos

O exemplo a seguir demonstra como o Equals método pode ser substituído por um tipo de valor derivado.

``````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
``````

## Comentários

O ValueType.Equals(Object) método substitui Object.Equals(Object) e fornece a implementação padrão de igualdade de valor para todos os tipos de valor no .NET.

A implementação padrão chama Object.Equals(Object) em cada campo da instância atual e `obj` retorna `true` se todos os campos forem iguais.

Dica

Especialmente se o tipo de valor contiver campos que são tipos de referência, você deverá substituir o Equals(Object) método . Isso pode melhorar o desempenho e permitir que você represente mais de perto o significado da igualdade para o tipo.

### Anotações para o Windows Runtime

Quando você chama o Equals método em uma estrutura Windows Runtime, ele fornece o comportamento padrão para tipos de valor que não substituem Equals. Isso faz parte do suporte que o .NET fornece para o Windows Runtime (consulte Suporte do .NET para aplicativos da Windows Store e Windows Runtime). Windows Runtime estruturas não podem substituir Equals, mesmo que sejam escritas com C# ou Visual Basic, porque não podem ter métodos. (Além disso, as estruturas no próprio Windows Runtime não herdam ValueType.) No entanto, eles parecem ter ToStringmétodos , Equalse GetHashCode quando você os usa em seu código C# ou Visual Basic, e o .NET fornece o comportamento padrão para esses métodos.