interface objectives
play

Interface Objectives Discuss interfaces concept definition - PDF document

Interface Objectives Discuss interfaces concept definition implementation support for generic code 2 Interface An interface defines a specification also called contract A class can agree to abide by the


  1. Interface

  2. Objectives Discuss interfaces • – concept – definition – implementation – support for generic code 2

  3. Interface An interface defines a specification • – also called contract • A class can agree to abide by the contract – by implementing the interface – enforced by compiler 3

  4. Interface definition • An interface is created using the keyword interface – body contained in { and } – names follow class naming convention with initial upper case I interface interface IMyInterface definition { ... } 4

  5. Interface contents Interface can contain method, indexer, property, and event • – no implementations allowed – no other types of members allowed interface IMyInterface { method void Process(int arg1, double arg2); indexer float this [int index] { get; set; } property string Name { get; set; } event event MouseEventHandler Mouse; } 5

  6. Access level • Interface contents implicitly public – error to use modifier explicitly interface IMyInterface { error, can not explicitly label public void Process(int arg1, double arg2); as public ... } 6

  7. Framework interfaces .NET Framework defines many interfaces • public interface ICloneable { object Clone(); } public interface IDisposable { public interface IList ... void Dispose(); { } int Add (object value); void Remove (object value); bool Contains(object value); ... } 7

  8. Custom interface Programmer can define interface • interface IFighter { void Punch(int side); void Kick (int side); void Block(); } interface IWrestler { void Takedown(int legs); void Escape(); } 8

  9. Implementing interface Class can support interface • – declare using class : interface syntax – implement contents declare class Soldier : IFighter { public void Punch(int side) implement methods { Move(arms[side], Forward); } public void Kick (int side) { Move(legs[side], Forward); } public void Block() { Move(arms[Left ], Up); Move(arms[Right], Up); } ... } 9

  10. Interface reference Interface reference can refer to implementing object • – access limited – can only access interface members IFighter f = new Soldier(); can only call IFighter f.Punch(Left); methods when using f.Kick(Right); IFighter reference f.Block(); ... 10

  11. Implementation by multiple classes Many classes can support the same interface • – implement methods in their own way Soldier implements IFighter class Soldier : IFighter { public void Punch(int side) { ... } public void Kick (int side) { ... } public void Block() { ... } ... } Robot implement IFighter class Robot : IFighter { public void Punch(int side) { ... } public void Kick (int side) { ... } public void Block() { ... } ... } 11

  12. Generic code Methods coded against interface • – work with any implementing object generic void WarmUp(IFighter f) void Match() { { f.Punch(Left ); Soldier s = new Soldier(); f.Punch(Right); Robot r = new Robot (); f.Kick (Left ); f.Kick (Right); WarmUp(s); } WarmUp(r); void Fight(IFighter a, IFighter b) Fight(s, r); { } a.Punch(Left); b.Block(); b.Punch(Right); ok, both a.Block(); b.Kick(Left); implement } IFighter 12

  13. Type testing Can test if object implements particular interface • – using operator is void March(Soldier s) { test if Soldier if (s is IFighter) implements IFighter ... } 13

  14. Implementing multiple interfaces Class can support several interfaces • – comma separated list in class definition – must define methods of all interfaces class Soldier : IFighter, IWrestler { IFighter public void Punch(int side) { ... } methods public void Kick (int side) { ... } public void Block() { ... } IWrestler public void Takedown(int legs) { ... } methods public void Escape() { ... } ... } 14

  15. Compatibility Object compatible with reference of any supported interface • void WarmUp(IFighter f) { ... } void Stretch(IWrestler w) { ... } void Prepare(Soldier s) { ok since Soldier WarmUp (s); implements Stretch(s); both interfaces } 15

  16. Inheritance and interface Class may inherit from base class and implement interfaces • – same syntax in declaration – base class must be listed first or compile time error base class interface interface class Soldier : Person, IFighter, IWrestler { ... } 16

  17. Interfaces should not grow Adding methods to interface will break client code • – classes no longer implement all methods interface IFighter { void Punch(int side); void Kick (int side); void Block(); new method void Bite(); } class Soldier : IFighter { ... public void Punch(int side) { ... } code breaks public void Kick (int side) { ... } public void Block() { ... } } 17

  18. Interface inheritance Interface can inherit from other interface • – syntax analogous to class inheritance – creates new interface that is a specialization of base interface base interface IFighter { void Punch(int side); void Kick (int side); void Block(); } derived interface IStreetFighter : IFighter { void Bite(); } 18

  19. Multiple interface inheritance Interface can inherit from multiple interfaces • – new interface includes members of all base interfaces – can also add its own interface IFighter interface IWrestler { { void Punch(int side); void Takedown(int legs); void Kick (int side); void Escape (); void Block(); } } multiple inheritance interface IStreetFighter : IFighter, IWrestler allowed { void Bite(); } 19

  20. Implementing derived interface Class implementing derived interface must code all methods • – of all interfaces in hierarchy class Soldier : IStreetFighter { from IFighter public void Punch(int side) { ... } public void Kick (int side) { ... } public void Block() { ... } from IWrestler public void Takedown(int legs) { ... } public void Escape() { ... } from IStreetFighter public void Bite() { ... } ... } 20

  21. Ambiguity Different interfaces may define method with same signature • – ambiguous when class tries to implement both interfaces different interface IFighter interface IWrestler interfaces { { same void Block(); void Block(); signature ... ... } } 21

  22. Resolving ambiguity Class may need to implement interfaces having ambiguity • • Two options to handle the situation – can implement one method that fills both roles – can implement both methods explicitly 22

  23. Implement one method When implementing two interfaces with same method • – can implement one method – the method must logically work in both roles – simplest solution when applicable interfaces contain method class Soldier : IFighter, IWrestler with same signature { class codes one public void Block() method only { ... } ... } 23

  24. Explicit method implementation When implementing two interfaces with same method • – can explicitly implement both methods – must qualify each implementation with interface name – no access modifier allowed interfaces contain 2 methods class Soldier : IFighter, IWrestler with same signature { IFighter version void IFighter.Block() { ... } IWrestler version void IWrestler.Block() { ... } ... } 24

  25. Limitation on explicit method call Call to explicit method implementation limited • • Cannot call through reference of class type – call would be ambiguous since more than one exists – methods are not public Soldier reference Soldier s = new Soldier(); error, cannot call Block s.Block(); ... 25

  26. Calling explicit method implementation Call explicit method implementation with interface reference • – type of reference determines method called Soldier s = new Soldier(); IFighter reference IFighter f = s; calls IFighter.Block f.Block(); IWrestler reference IWrestler w = s; calls IWrestler.Block w.Block(); ... 26

  27. Summary Interface • – named collection of declarations – useful to write generic code • Classes implement interfaces – must implement all methods – gain type compatibility with interface 27

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend