INTERFACE |
Interface |
|---|---|
| C# (C Sharp) | |
Syntaxe
| interface definition; |
Paramètres
| Nom | Description |
|---|---|
| definition | Ce paramètre permet d'indiquer une définition de type interface |
Description
Ce mot réservé permet de définir une interface pour une classe héritière.
Remarques
- Le mot clef interface permet de définir un contrat de programmation que les classes ou struct peuvent implémenter. Ce contrat est constitué de signatures de méthodes, propriétés, événements ou indexeurs sans implémentation. Il favorise la programmation orientée objet et l'abstraction, car il sépare le "quoi faire" du "comment faire".
- Une interface ne contient pas de logique métier dans ses membres (avant C# 8.0) : Elle ne peut donc pas définir de variables d'instance ni de constructeurs. Les classes l'implémentant sont tenues de fournir le corps des membres définis.
- Depuis C# 8.0, il est possible d'inclure des méthodes par défaut avec une implémentation dans les interfaces : Cela améliore la compatibilité descendante et réduit la duplication de code dans les implémentations multiples. Cependant, cette nouveauté peut complexifier la conception si elle est mal utilisée.
- Une classe peut implémenter plusieurs interfaces, ce qui permet d'éviter les problèmes classiques liés à l'héritage multiple. Cela encourage une approche basée sur les capacités : une classe peut être "triable", "affichable", "sérialisable",..., selon les interfaces qu'elle implémente. C'est un des piliers de l'approche SOLID (principe ISP).
- Les interfaces permettent de faciliter les tests unitaires grâce à l'utilisation de mocks ou stubs : On peut substituer une implémentation concrète par une implémentation simulée sans modifier le code métier. C'est fondamental en développement orienté interface et en injection de dépendances.
- Une interface peut hériter d'une ou plusieurs autres interfaces, ce qui permet de composer des comportements complexes. Par exemple, une interface IEntity peut hériter de IIdentifiable et ITrackable, regroupant des fonctionnalités. Cela permet une conception modulaire et réutilisable.
- Les membres d'une interface sont implicitement publics et abstraits : Il n'est pas nécessaire (et pas permis) de les déclarer avec public ou abstract explicitement. Toute tentative d'utiliser un modificateur d'accès entraînera une erreur de compilation.
- Les interfaces sont également très utiles dans les API publiques pour définir des points d'extension ou d'intégration. Elles permettent de proposer un comportement extensible, que d'autres développeurs peuvent implémenter. Cela permet une architecture ouverte aux modifications sans changer le code existant.
Exemple
Cet exemple permet de montrer la syntaxe de ce mot réservé :
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- namespace InterfaceSamples
- {
- abstract class AbstractBase
- {
- abstract public int ABC(int x);
-
- public int DEF(int y)
- {
- return y;
- }
- }
-
- interface AbstractInterface
- {
- int getValue();
- }
-
-
- class Program
- {
- static void Main(string[] args)
- {
- AbstractInterface c;
- Console.WriteLine("...");
- }
- }
- }
Dernière mise à jour : Mardi, le 26 janvier 2016