Prashanth has informed us of an interesting fact about the .Net framework. Despite Microsoft's claims, Prashanth explains that maybe not every class is inherited from the Object class.
Is Object Class, the Root of all Hierarchies? - The Article (Page 2 of 3 )
What is an Object class?
For those who are new to .NET, according to MSDN library - "Object is the ultimate superclass of all classes in the .NET Framework; it is the root of the type hierarchy."
This is the class declaration of the object class
[Serializable] [ClassInterface(ClassInterfaceType.AutoDual)] public class object
All the classes are required to inherit from this Object class but they need not declare inheritance from it explicitly as it is taken care internally. While all classes inherit from it, it doesn’t inherit from any super class or interface.
Since we have inherited from IFoo, we need to implement the Ishow method. When we type ifoo.show(), we get a compile time error saying that the interface doesn’t contain a definition for show method. This is correct since an interface is allowed to access only methods declared by it even though the object it might be referring has other methods.
The problem arises now when we type ifoo.equals(f), ideally this should give a compile time error since it is not declared by IFoo interface or none of its super interface but it doesn’t. Nor does it give a compile time error for using any of the methods of Object class.
This is definitely a discrepancy from the fact that an interface is allowed to access only methods declared by it. An interface for sure can't inherit from a class so how then can we explain for the four methods of Object which are available to any interface. The only possible solution can be that there must be a super interface like IObject as declared below:
Interface IObject { public virtual bool equals(object); public virtual int getHashCode(); public Type getType(); public virtual string toString(); }
and the Object class must have inherited from this interface and also that this IObject must be the super interface of all the interfaces just like Object is to other classes.