Programmation C sharp/Interfaces

Un livre de Wikibooks.

Programmation C#
Programmation C#
Sommaire
Le langage
Programmation avancée
API .Net
Ressources
Modifier ce modèle

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();
}