== Why is this an issue? Making a `base` call when overriding a method is generally a good idea, but not in the case of https://learn.microsoft.com/en-us/dotnet/api/system.object.gethashcode[`GetHashCode`] and https://learn.microsoft.com/en-us/dotnet/api/system.object.equals[`Equals`] for classes that directly extend `Object`. These methods are based on the object's reference, meaning that no two objects that use those `base` methods can be equal or have the same hash. === Exceptions This rule doesn't report on guard conditions checking for reference equality. For example: [source,csharp] ---- public override bool Equals(object obj) { if (base.Equals(obj)) // Compliant, it's a guard condition. { return true; } ... } ---- == How to fix it === Code examples ==== Noncompliant code example [source,csharp,diff-id=1,diff-type=noncompliant] ---- var m1 = new MyClass(2); var m2 = new MyClass(2); m1.Equals(m2) // False m1.GetHashCode(); // 43942919 m2.GetHashCode(); // 59941935 class MyClass { private readonly int x; public MyClass(int x) => this.x = x; public override bool Equals(Object obj) => base.Equals(); public override int GetHashCode() => x.GetHashCode() ^ base.GetHashCode(); // Noncompliant, base.GetHashCode returns a code based on the objects reference } ---- ==== Compliant solution [source,csharp,diff-id=1,diff-type=compliant] ---- var m1 = new MyClass(2); var m2 = new MyClass(2); m1.Equals(m2) // True m1.GetHashCode(); // 2 m2.GetHashCode(); // 2 class MyClass { private readonly int x; public MyClass(int x) => this.x = x; public override bool Equals(Object obj) => this.x == ((MyClass)obj).x; public override int GetHashCode() => x.GetHashCode() } ---- == Resources === Documentation * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/api/system.object.gethashcode?view=net-7.0[Object.GetHashCode Method] * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/api/system.object.equals[Object.Equals Method]