|
INTERFACE EN C#
par Didier MEO, Consultant ingénieur. 15/11/2007. E-mail: didier.meo@free.fr
L'utilisation des interfaces en C# permet de rendre une application
flexible, surtout par l'implémentation des classes dérivant de
celles-ci. L'interface ici ne signifie pas un module électronique de
connexion (découplement) ou un module d'une application, comme est le
cas par exemple d'une interface graphique utilisateur (GUI), mais une
sorte de variable complexe en langage de programmation C#, pour
découpler les classes, qui forment aussi à leur tour une sorte de
variable.
Description
Une interface peut être membre d'un espace de noms ou d'une classe, et
peut contenir uniquement les signatures des membres suivants :
méthodes, délégués, événements, propriétés, indexeurs. C'est un contrat
dans lequel y sont cités ces éléments variables (membres).
L'implémentation de ces éléments (méthodes, propriétés, etc..) se fait
dans la classe qui implémente l'interface. Toutes les classes qui
implémentent cet interface doivent respecter ce contrat, c'est-à-dire
qu'elles doivent toutes posséder tous les éléments membres (méthodes, etc..)
décrits dans l'interface.
Une interface peut hériter d'une ou de plusieurs interfaces de base. Si
une liste des types de base contient une classe de base et des
interfaces, la classe de base doit apparaître en premier dans la liste.
Les interfaces en C# profitent du fait que l'objet représenté par
l'interface héritera forcément de System.Object.
C'est pour dire que n'importe quel objet implémentant une interface hérite
forcement de System.Object.
Tous les membres (méthodes, propriétés, etc..) d'interface sont
automatiquement publics.
Les interfaces sont définies à l'aide du mot clé interface.
Par exemple :
interface ITest
{
int CompareTo (object obj);
int Exposant( int bas, int exp );
}
Une classe qui implémente une interface peut implémenter de façon
explicite des membres de cette interface. Lorsqu'un membre est
implémenté de façon explicite, il n'est pas accessible via une instance
de classe, mais uniquement via une instance de l'interface.
Les interfaces décrivent un groupe de fonctionnalités connexes qui
peuvent appartenir à n'importe quel class ou struct .
Les classes et les structures peuvent hériter d'interfaces de la même
manière que les classes peuvent hériter d'une classe de base ou d'une
structure, à deux exceptions près :
Une classe ou struct peut hériter de plusieurs interfaces.
Lorsqu'une classe ou une structure hérite une interface, elle hérite
uniquement les noms de méthodes et les signatures, parce que
l'interface elle-même ne contient aucune implémentation.
Pour implémenter un membre d'interface, le membre correspondant sur la
classe doit être public, non static et avoir le même nom et la même
signature que le membre d'interface. Les propriétés et les indexeurs
sur une classe peuvent définir des accesseurs supplémentaires pour une
propriété ou l'indexeur défini sur une interface. Par exemple, une
interface peut déclarer une propriété avec un accesseur get, mais la
classe qui implémente l'interface peut déclarer la même propriété avec
un accesseur get et un accesseur set. Toutefois, si la propriété ou
l'indexeur utilise l'implémentation explicite, les accesseurs doivent
correspondre.
Les interfaces et les membres d'interface sont abstraits ; les
interfaces ne fournissent pas d'implémentation par défaut.
L'interface IComparable annonce à l'utilisateur de dernier peut
se comparer à d'autres objets du même type, et que
l'utilisateur de l'interface n'a pas besoin de savoir comment cela est
implémenté.
Les interfaces peuvent hériter d'autres interfaces. Il est possible pour
une classe d'hériter plusieurs fois d'une interface, par l'intermédiaire
de classes de base ou interfaces dont elle hérite. Dans ce cas, la
classe ne peut implémenter l'interface qu'une seule fois, si elle est
déclarée comme faisant partie de la nouvelle classe. Si l'interface
héritée n'est pas déclarée dans le cadre de la nouvelle classe, son
implémentation est fournie par la classe de base qui l'a déclarée. Il
est possible pour une classe de base d'implémenter des membres
d'interface à l'aide de membres virtuels - dans ce cas, la classe qui
hérite de l'interface peut modifier le comportement de l'interface en
substituant les membres virtuels.
Une interface possède les propriétés suivantes :
Une interface est semblable à une classe de base abstraite : tout type
non abstract qui hérite de l'interface doit implémenter tous ses
membres.
Une interface ne peut pas être instanciée directement.
Les interfaces peuvent contenir des événements, des indexeurs, des
méthodes et des propriétés.
Les interfaces ne contiennent aucune implémentation de méthodes.
Les classes et structs peuvent hériter d'une ou plusieurs interfaces.
Une d'interface peut elle-même hériter de plusieurs interfaces.
|