Classes support single inheritance, and the type object is the ultimate base
class for all classes.
The classes shown in earlier examples all implicitly derive from object.
The example
using System;
class A
{
public void F() { Console.WriteLine("A.F"); }
}
shows a class A that implicitly derives from object. The example
class B: A
{
public void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main() {
B b = new B();
b.F(); // Inherited from A
b.G(); // Introduced in B
Chapter 8 Language Overview
41
A a = b; // Treat a B as an A
a.F();
}
}
shows a class B that derives from A. The class B inherits A.s F method, and
introduces a G method of its own.
Methods, properties, and indexers can be virtual, which means that their
implementation can be overridden
in derived classes. The example
using System;
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() {
base.F();
Console.WriteLine("B.F");
}
}
class Test
{
static void Main() {
B b = new B();
b.F();
A a = b;
a.F();
}
}
shows a class A with a virtual method F, and a class B that overrides F.
The overriding method in B contains
a call, base.F(), which calls the overridden method in A.
A class can indicate that it is incomplete, and is intended only as a base
class for other classes, by including
the modifier abstract. Such a class is called an abstract class. An
abstract class can specify abstract
members.members that a non-abstract derived class must implement. The
example
using System;
abstract class A
{
public abstract void F();
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class Test
{
static void Main() {
B b = new B();
b.F();
A a = b;
a.F();
}
}
introduces an abstract method F in the abstract class A. The non-abstract
class B provides an implementation
for this method.