interface IA { } interface IB { } class A { } class B { } class X : IA { } class Program { public static void Main () { IA a = null; IB b = null; bool r = a == b; A aa = null; B bb = null; // Only this fails //r = aa == bb; X x = null; r = x == a; r = x == b; object o = null; r = o == x; r = o == a; r = o == aa; } }