C#
  Home arrow C# arrow Page 2 - Is Object Class, the Root of all Hierarchi...
Dev Articles Forums 
ADO.NET  
Apache  
ASP  
ASP.NET  
C#  
C++  
ColdFusion  
COM/COM+  
Delphi-Kylix  
Design Usability  
Development Cycles  
DHTML  
Embedded Tools  
Flash  
Graphic Design  
HTML  
IIS  
Interviews  
Java  
JavaScript  
MySQL  
Oracle  
Photoshop  
PHP  
Reviews  
Ruby-on-Rails  
SQL  
SQL Server  
Style Sheets  
VB.Net  
Visual Basic  
Web Authoring  
Web Services  
Web Standards  
XML  
Mobile Linux 
App Generation ROI 
IBM® developerWorks 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
C#

Is Object Class, the Root of all Hierarchies?
By: C. Prashanth
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 5 stars5 stars5 stars5 stars5 stars / 3
    2003-04-02

    Table of Contents:
  • Is Object Class, the Root of all Hierarchies?
  • The Article
  • Conclusion

  • Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    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.

    So what's the problem?

    This I will explain with a help of an example.

    Let's define a class called Foo

    Class Foo
    {
     void show() {}
     static void main(string[] args)
     {
      Foo f=new Foo();
    }
    }

    If you have Visual Studio IDE or any other editor which supports intellisense, when you type f. you will get the following methods

    1. Equals
    2. GetHashCode
    3. ToString
    4. GetType
    5. show

    Even though you have defined only one method show since Foo implicitly inherits from Object it gets the other four methods.

    Let's now define an interface called IFoo and make Foo class inherit from it.

    Interface IFoo
    {
     void Ishow();
    }
    class Foo:IFoo
    {
     void show(){}
     void IFoo.Ishow(){}
     static void main(string[] args)
     {
      Foo f=new Foo();
      IFoo ifoo=f;
    }
    }

    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.

    More C# Articles
    More By C. Prashanth


     

    C# ARTICLES

    - Introduction to Objects and Classes in C#, P...
    - Visual C#.NET, Part 1: Introduction to Progr...
    - C# - An Introduction
    - Hotmail Exposed: Access Hotmail using C#
    - Razor Sharp C#
    - Introduction to Objects and Classes in C#
    - Making Your Code CLS Compliant
    - Programming with MySQL and .NET Technologies
    - Socket Programming in C# - Part II
    - Socket Programming in C# - Part I
    - Creational Patterns in C#
    - Type Conversions
    - Creating Custom Delegates and Events in C#
    - Inheritance and Polymorphism
    - Understanding Properties in C#







    © 2003-2009 by Developer Shed. All rights reserved. DS Cluster 4 Hosted by Hostway
    For more Enterprise Application Development news, visit eWeek