You can access the members of an interface through an
object of any class that implements the interface. For example, because
Document
implements IStorable
, you can access the IStorable
methods and property through any
Document
instance:
Document doc = new Document("Test Document"); doc.Status = -1; doc.Read( );
At times, though, you won’t know that you have a Document
object; you’ll only know that you
have objects that implement IStorable
, for example, if you have an array
of IStorable
objects. You can create
a reference of type IStorable
, and
assign that to each member in the array, accessing the IStorable
methods and property (but not the
Document
-specific methods, because
all the compiler knows is that you have an IStorable
, not a Document
).
You cannot instantiate an interface directly; that is, you cannot write:
IStorable isDoc = new IStorable;
You can, however, create an instance of the implementing class and then assign that object to a reference to any of the interfaces it implements:
Document myDoc = new Document(//...); IStorable myStorable = myDoc;
You can read this line as “assign the IStorable
-implementing object myDoc
to the IStorable
reference myStorable
.”
You are now free to use the IStorable
reference to access the IStorable
methods and properties of the
document:
myStorable.Status = 0; myStorable.Read( );
Notice that the IStorable
reference myStorable
has access to
the IStorable
property Status
, but not to the
Document
’s private member variable
status
, even though the IStorable
reference was instantiated as a
reference to the Document
. The
IStorable
reference only knows about
the IStorable
interface, not about
the Document
’s internal
members.
Thus far, you have assigned the Document
object (myDoc) to an IStorable
reference.