public static void Main()
Console.WriteLine("Hello World");
A B1 = new B() { FieldA = 1, FieldB = 2 };
B B2 = new B() { FieldA = 1, FieldB = 3 };
Console.WriteLine(object.ReferenceEquals(B1, B2));
Console.WriteLine(object.Equals(B1, B2));
Console.WriteLine(B1.Equals(B2));
Console.WriteLine(B1 == B2);
public int FieldA { get;set;}
public override bool Equals(object obj)
if (ReferenceEquals(obj, null) || !(obj is A)) return false;
public static bool operator== (A x, A y)
bool xIsNull = ReferenceEquals(x, null);
bool yIsNull = ReferenceEquals(y, null);
if (xIsNull && yIsNull) return true;
if (xIsNull || yIsNull) return false;
return x.FieldA == y.FieldA;
public static bool operator!= (A x, A y)
public int FieldB { get;set;}
public override bool Equals(object obj)
if (ReferenceEquals(obj, null) || !(obj is B)) return false;
public static bool operator== (B x, B y)
bool xIsNull = ReferenceEquals(x, null);
bool yIsNull = ReferenceEquals(y, null);
if (xIsNull && yIsNull) return true;
if (xIsNull || yIsNull) return false;
return x.FieldA == y.FieldA && x.FieldB == y.FieldB;
public static bool operator!= (B x, B y)