KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I was surprised recently to discover that the compiler is apparently not strict about comparing interface references and am wondering why it works this way. Consider this code: class Program { interface I1 {} interface I2 {} class C1 : I1 {} class C2 : I2 {} static void Main(string[] args) { C1 c1 = new C1(); C2 c2 = new C2(); I1 i1 = c1; I2 i2 = c2; bool x = c1 == c2; bool y = i1 == i2; } } The compiler says that I can't compare c1 == c2 , which follows. The types are totally unrelated. Yet, it does permit me to compare i1 == i2 . I would expect it to error here with a compile-time failure but I was surprised to find out that you can compare any interface to any other and the compiler will never complain. I could compare, for example (I1)null == (IDisposable)null and no problem. Are interfaces not objects? Are they a special type of reference? My expectation would be that a == would result in either a straight reference compare or a call into the concrete class's virtual Equals. What am I missing?
Tags (comma-separated)
Save Edits
Cancel