Section 11.6. The Root of All Classes: Object


11.6. The Root of All Classes: Object

All C# classes, of any type, ultimately derive from a single class: Object . Object is the base class for all other classes.

A base class is the immediate "parent" of a derived class. A derived class can be the base to further derived classes, creating an inheritance tree or hierarchy. A root class is the topmost class in an inheritance hierarchy. In C#, the root class is Object . The nomenclature is a bit confusing until you imagine an upside-down tree, with the root on top and the derived classes below. Thus, the base class is considered to be "above" the derived class.

Object provides a number of methods that subclasses can override. These include Equals( ) , which determines if two objects are the same, and ToString( ) , which returns a string to represent the current object. Specifically, ToString( ) returns a string with the name of the class to which the object belongs. Table 11-1 summarizes the methods of Object .

Table 11-1. The Object class

Method

What it does

Equals( )

Evaluates whether two objects are equivalent

GetHashCode( )

Allows objects to provide their own hash function for use in collections (see Chapter 14)

GetType( )

Provides access to the Type object

ToString( )

Provides a string representation of the object

Finalize( )

Cleans up nonmemory resources; implemented by a destructor (finalizer)


In Example 11-4, the Dog class overrides the ToString( ) method inherited from Object , to return the weight of the Dog .

Example 11-4. Overriding ToString
 using System; public class Dog {    private int weight;    // constructor    public Dog( int weight )    {       this.weight = weight;    }    // override Object.ToString    public override string ToString(  )    {       return weight.ToString(  );    } } public class Tester {    static void Main(  )    {       int i = 5;       Console.WriteLine( "The value of i is: {0}", i.ToString(  ) );       Dog milo = new Dog( 62 );       Console.WriteLine( "My dog Milo weighs {0} pounds", milo);    } } Output: The value of i is: 5 My dog Milo weighs 62 pounds 

Some classes (such as Console ) have methods that expect a string (such as Write-Line( ) ). These methods will call the ToString( ) method on your class if you've overridden the inherited ToString( ) method from Object . This lets you pass a Dog to Console.WriteLine , and the correct information will display.

This example also takes advantage of the startling fact that intrinsic types ( int , long , etc.) can also be treated as if they derive from Object , and thus you can call ToString( ) on an int variable! Calling ToString( ) on an intrinsic type returns a string representation of the variable's value.

The documentation for Object.ToString( ) reveals its signature:

 public virtual string ToString(  ); 

It is a public virtual method that returns a string and takes no parameters. All the built-in types, such as int , derive from Object and so can invoke Object 's methods.

The Console class's Write( ) and WriteLine( ) methods call ToString( ) for you on objects that you pass in for display. Thus, by overriding ToString( ) in the Dog class, you did not have to pass in milo.ToString( ) but rather could just pass in milo !


If you comment out the overridden function, the base method will be invoked. The base class default behavior is to return a string with the name of the class itself. Thus, the output would be changed to the meaningless:

 My dog Milo weighs Dog pounds 

Classes do not need to declare explicitly that they derive from Object ; the inheritance is implicit.




Learning C# 2005
Learning C# 2005: Get Started with C# 2.0 and .NET Programming (2nd Edition)
ISBN: 0596102097
EAN: 2147483647
Year: 2004
Pages: 250

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net