Programmation C sharp/Interfaces
Un livre de Wikibooks.
Une interface ne fait que décrire une liste de méthodes, sans implémentation. Le code de ces méthodes est fourni par les classes qui implémentent l'interface.
Sections |
[modifier] Déclarer une interface
Le mot clé interface sert à déclarer une interface. Il est suivi par le nom de l'interface, qui par convention commence généralement par la lettre I (i majuscule comme interface).
Exemple :
public interface IAffichable { /* Liste des méthodes que doivent posséder toutes les classes implémentant l'interface IAffichable : */ public void Afficher(); public void Afficher(string message); }
Par convention, le nom d'une interface ne comportant qu'une seule méthode est celui de la méthode suivi du suffixe "able". Par exemple, si la seule méthode s'appelle Draw, l'interface est nommée IDrawable.
[modifier] Utiliser une interface
L'interface créée est un nouveau type dont les méthodes sont appelables sans connaître la classe qui les implémente.
Exemple :
public void Montrer(IAffichable affichable,string message) { affichable.Afficher(message); }
[modifier] Implémenter une interface
Une interface est implémentée par une classe la déclarant dans sa liste d'implémentation. Cette classe doit alors fournir le code de toutes les méthodes de l'interface, à moins de déclarer ces méthodes comme abstraites. Dans ce dernier cas, l'implémentation devra être effectuée par une sous-classe.
Exemple :
using System; public class Personne : IAffichable { private string nom, prenom; public void Afficher() { Console.WriteLine(nom+" "+prenom); } public void Afficher(string message) { Console.WriteLine(nom+" "+prenom+" : "+message); } }
[modifier] Méthodes, propriétés, indexeurs, events
Une interface peut en fait déclarer des méthodes, des propriétés, des indexeurs et des events.
Exemple :
public interface IExemple { // Méthode à implémenter : public void UneMethodeAImplementer(); // Propriétés à implémenter : public string UneProprieteAImplementer { get; set; } public string UneProprieteLectureSeuleAImplementer { get; } // Tableau de string à implémenter (indexeur) : public string this [ int index ] { get; set; } // Evènement à implémenter : public event PageRecueDelegate PageRecue { add; remove; } }
[modifier] Héritage
Une interface peut hériter d'une autre interface. Elle possède donc les mêmes déclarations que l'interface de base en plus de ces propres déclarations. En outre, elle peut être utilisée là ou une implémentation de l'interface de base est requise.
Exemple :
public interface IDrawable { public void Draw(); } public interface IPrintable : IDrawable { public void Print(); } public class Cercle : IPrintable { public void Draw() { ... } public void Print() { ... } } ... public void Methode() { IDrawable drawable = new Cercle(); // ^ conversion implicite de IPrintable vers IDrawable drawable.Draw(); }
