Inheritance
Inheritance is a powerful feature of Object Oriented Programming languages.
Using inheritance you create base classes that encapsulate common functionality.
The base class is inherited by derived classes. The derived classes inherit the
properties and methods of the base class. The .Net Framework uses inheritance
throughout. For example, the CollectionBase class contains properties and
methods required by most collections. It contains properties such as Capacity
and Count and methods such as Clear and RemoveAt.
In order to use the base class in another class (referred to as the derived
class) you reference the base class by placing a colon after the name of the
derived class and then place the name of the base class. The following code
defines a base class RentalItem and two derived classes DVD and Book that
inherit the base class.
public class
RentalItem
{
string _title;
public string
Title
{
get {
return _title; }
set { _title =
value; }
}
public
Boolean CheckStock(string title)
{
//code to check if in stock.
//returns true for demo.
return
true;
}
}
public
class DVD :
RentalItem
{
}
public class
Book : RentalItem
{
}
The derived classes inherit the base class's properties and methods and clients
of the derived class have no knowledge of the base class. The derived class is
not limited to the properties and methods of the base class. They can further
define properties and methods as needed. The following code shows the derived
class Book defining its own property ISBN.
public class
Book : RentalItem
{
string _ISBN;
public string
ISBN
{
get { return
_ISBN; }
set { _ISBN =
value; }
}
}
Clients of the Book class will be exposed to both properties Title and ISBN as
shown in the following screen shot.
There are many times when the derived class needs to use the functionality of
the base class but also needs to add some functionality unique to the derived
class. In this case the derived DVD class uses the keyword base to call the base
class RentalItem's CheckStock method as shown in the following code.
public class
DVD : RentalItem
{
public
Boolean Rent(string title,
int age)
{
if(base.CheckStock(title))
{
//code to check
rating against age of renter
//returns true for demo
return true;
}
else
{
return
false;
}
}
}
Methods inherited by the derived class can be overloaded just as you would
overload any method in the same class. The method names are the same but the
method signatures are different. The following code shows the Book class
overloading the CheckStock method of the RentalItem base class.
public class
Book : RentalItem
{
string _ISBN;
public string
ISBN
{
get { return
_ISBN; }
set { _ISBN =
value; }
}
public
Boolean CheckStock(string title,
string author)
{
//code to check if in stock.
//returns true for demo.
return
true;
}
}
A client of the Book class will see both methods as shown in the following
screen shot.
A method of the derived class can override a method of the base class using the
override key word. For example the Book class can override the CheckStock method
of the RentalItem base class to pass in the ISBN instead of the title.
public override
Boolean CheckStock(string
ISBN)
{
//code to check if in stock.
//returns true for demo.
return
true;
}
In this case clients of the Book class could use
the overridden method and would not see the RentalItem's method.
At this point, a client can instantiate an instance of both the Book class and
the RentalItem class. There are times when the base class is not designed to be
instantiated directly by clients; rather it is designed to be inherited by
derived classes that are then exposed to clients. These types of base classes
are called abstract classes. To create abstract classes use the abstract key
word when defining the base class.
public abstract
class RentalItem
{
string _title;
public string
Title
{
get {
return _title; }
set { _title =
value; }
}
public
Boolean CheckStock(string title)
{
//code to check if in stock.
//returns true for demo.
return
true;
}
}
The .Net Framework contains many abstract classes, for example the TextReader
class is the abstract base class of the StreamReader and StringReader classes.
In this article you looked at inheritance and how it is used in C# programming.
It is important that you understand this concept to efficiently program in C#
and effectively work with the .NET framework. For more information on object
oriented programming, C#, and working with the .NET framework refer to my book
"Beginning C# Object Oriented Programming" from Apress publishers.