.net - Compare 2 interfaces -
interface //: iequatable<i> { } class : { static public bool operator !=(a a, i) { return !(a == i); } static public bool operator ==(a a, i) { return true; } public override bool equals(object obj) { if (obj i) return == (i)obj; else return base.equals(obj); } public override int gethashcode() { return base.gethashcode(); } } class b : { static public bool operator !=(b b, i) { return !(b == i); } static public bool operator ==(b b, i) { return false; } public override bool equals(object obj) { if (obj i) return == (i)obj; else return base.equals(obj); } public override int gethashcode() { return base.gethashcode(); } } public partial class form1 : form { public form1() { initializecomponent(); } private void form1_load(object sender, eventargs e) { list<i> iss = new list<i>(); a = new a(); b b = new b(); iss.add(a); iss.add(b); if (iss[0] == iss[1]) console.writeline("a == b"); else console.writeline("a != b"); if (iss[1] == iss[0]) console.writeline("b == a"); else console.writeline("b != a"); } }
the output
a != b b !=
i expected
a == b b !=
could can explain it?
i'd set breakpoint in each class's equals() method , == operator, , see gets called evaluate each expression. it's not expect. guess because i
not , cannot require implementors expose ==
operator, when 2 i
s compared you're doing, runtime doesn't bother looking overloaded operators , instead resorts system.object ==
, performs referential check.
Comments
Post a Comment