C# › Equality: Equals, GetHashCode & IEquatable
How does a struct's default Equals() behavior differ from a class's, even without any overrides?
BeginnerAnswer
System.ValueType (the base for all structs) overrides Equals() to perform FIELD-BY-FIELD value comparison by default (via reflection, which is slower than a hand-written override), unlike a plain class which defaults to reference equality — so two structs with identical field values ARE considered equal out of the box.
public struct Point { public int X, Y; }
var p1 = new Point { X = 1, Y = 2 };
var p2 = new Point { X = 1, Y = 2 };
Console.WriteLine(p1.Equals(p2)); // True -- structs compare by value by defaultReal-world example Relying on a simple struct's built-in value equality for basic data-holder types without writing custom Equals() logic.