Equivalence operators overloading in C#

class Point {
    public int x;
    public int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public static bool operator ==(Point left, Point right) {
        return (left.x == right.x) && (left.y == right.y);
    }

    public static bool operator !=(Point left, Point right) {
        return (left.x != right.x) || (left.y != right.y);
    }    
}

var p1 = new Point(1, 1);
var p2 = new Point(2, 2);
var p3 = new Point(1, 1);
var equal1 = p1 == p2;
//equal1 is False
var equal2 = p1 == p3;
//equal2 is True
var equal3 = p1 != p3;
//equal3 is False