There is a contract between ``++Equals(object)++`` and ``++GetHashCode()++``: If two objects are equal according to the ``++Equals(object)++`` method, then calling ``++GetHashCode()++`` on each of them must yield the same result. If this is not the case, many collections won't handle class instances correctly.


In order to comply with the contract, ``++Equals(object)++`` and ``++GetHashCode()++`` should be either both inherited, or both overridden.

== Noncompliant Code Example

----
class MyClass   // Noncompliant - should also override "GetHashCode()"
{
    public override bool Equals(object obj)
    {
        // ...
    }
}
----

== Compliant Solution

----
class MyClass
{
    public override bool Equals(object obj)
    {
        // ...
    }

    public override int GetHashCode()
    {
        // ...
    }
}
----

include::../see.adoc[]

ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
