Summary

  • An interface is a contract through which a class guarantees that it will implement certain methods, provide certain properties and indexers, and support certain events, all of which are specified in the interface definition.

  • You cannot create an instance of an interface. To access the interface methods, you need to create an instance of a class that implements that interface.

  • You declare an interface much like you would a class, but using the keyword interface. You can apply access modifiers to the interface, as you would with a class.

  • In the interface definition, the method declarations cannot have access modifiers.

  • To implement an interface on a class, you use the colon operator, followed by the name of the interface, similar to the syntax for inheritance.

  • Classes can derive from no more than one class, but can implement any number of interfaces. If a class has a base class and one or more interfaces, the base class must be listed first (after the colon). Separate the base class and interface names by commas.

  • When you define a class that implements an interface, you must then implement all the required members of that interface.

  • In situations where you don’t know what type of object you have, and you know only that the object implements a specific interface, you can create a reference to the interface and assign the object to that reference, providing you with access to the implemented interface methods.

  • You can use the is operator to determine whether an object derives from a base class or implements an interface. The is operator returns a Boolean value indicating whether the cast is valid, but it does not perform the cast.

  • The as operator attempts to cast a reference to a base type or an interface, and returns null if the cast is not valid.

  • You can extend an interface to add new methods or members. In the new interface definition, use the colon operator followed by the name of the original interface. This is very similar to derivation in classes.

  • The extended interface subsumes the original interface, so any class that implements the extended interface must also implement the original interface as well.

  • A class that implements an interface may mark any of the interface methods as virtual. These methods may then be overridden by derived classes.

  • When a class implements two or more interfaces with methods that have the same name, you resolve the conflict by prefixing the method name with the name of the interface and the dot operator (for example, IStorable.Write( )). If you do this, you cannot specify an access modifier, as the method is implicitly public.

You saw in this chapter how interfaces encourage polymorphism, allowing you to dictate the methods your classes implement, while still providing flexibility in your designs. They’re admittedly somewhat tricky to understand at first, but as you get more practice with them, you’ll get more comfortable with them. In this chapter, you used arrays to demonstrate the polymorphic features of interfaces, and that’s a pretty common use. However, the array isn’t the only collection class in C#. In fact, although arrays are simplest to understand, which is why we introduced them first, in many ways they’re the most limited of the collection classes. In the next chapter, you’ll learn about the other collection classes, and how you can use them with generics to get even more flexibility.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset