An interface is a contract that guarantees to a client how a class or structure will behave. When a class implements an interface, it tells any potential client “I guarantee I’ll support the methods, properties, events, and indexers of the named interface.” (See Chapter 5 for information about methods and properties, see Chapter 12 for information about events, and see Chapter 9 for coverage of indexers.)
An interface offers an alternative to a
MustInherit class (see Chapter 6) for creating contracts among classes and
their clients. These contracts are made manifest using the
Interface keyword, which declares a reference type
that encapsulates the contract.
Syntactically, an interface is like a class that has only
MustInherit methods. A
MustInherit class serves as the base class for a
family of derived classes, while interfaces are meant to be mixed in
with other inheritance trees.
When a class implements an interface, it must implement all the methods of that interface; in effect the class says “I agree to fulfill the contract defined by this interface.”
Inheriting from a
MustInherit class implements the
is-a relationship, introduced in Chapter 4. Implementing an interface defines a different
relationship that we’ve not seen until now: the
relationship. These two
relationships are subtly different. A car is a
vehicle, but it might implement the
CanBeBoughtWithABigLoan capability (as can a house, for example).