Interfaces (Guide de programmation C#)
Les interfaces décrivent un groupe de fonctionnalités connexes qui peuvent appartenir à n'importe quel class ou struct. Vous définissez une interface à l'aide du mot clé interface, comme illustré dans l'exemple suivant.
interface IEquatable<T>
{
bool Equals(T obj);
}
Les interfaces peuvent être composées de méthodes, de propriétés, d'événements, d'indexeurs ou de toute combinaison de ces quatre types de membres. Une interface ne peut pas contenir de constantes, de champs, d'opérateurs, de constructeurs d'instances, de destructeurs ou de types. Elle ne peut pas contenir de membres statiques. Les membres d'interface sont automatiquement publics et ils ne peuvent contenir aucun modificateur d'accès.
Lorsqu'une classe ou un struct implémente une interface, la classe ou le struct fournit une implémentation pour tous les membres définis par l'interface. L'interface elle-même ne procure aucune fonctionnalité qu'une classe ou un struct peut hériter, de la façon dont une fonctionnalité de classe de base peut être héritée. Toutefois, si une classe de base implémente une interface, la classe dérivée hérite de cette implémentation. On dit que la classe dérivée implémente l'interface implicitement.
Les classes et les structures implémentent des 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 implémenter plusieurs interfaces.
Lorsqu'une classe ou un struct implémente une interface, la classe ou le struct reçoit uniquement les noms de méthode et les signatures car l'interface elle-même ne contient pas d'implémentation, comme indiqué dans l'exemple suivant.
public class Car : IEquatable<Car> { public string Make {get; set;} public string Model { get; set; } public string Year { get; set; } // Implementation of IEquatable<T> interface public bool Equals(Car car) { if (this.Make == car.Make && this.Model == car.Model && this.Year == car.Year) { return true; } else return false; } }
L'interface IEquatable<T> annonce à l'utilisateur de l'objet que ce dernier peut déterminer s'il est égal à d'autres objets du même type, et l'utilisateur de l'interface n'a pas besoin de savoir comment cela est implémenté.
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é qui a un accesseur get. La classe qui implémente l'interface peut déclarer la même propriété avec un accesseur get et set. Toutefois, si la propriété ou l'indexeur utilise l'implémentation explicite, les accesseurs doivent correspondre. Pour plus d'informations sur l'implémentation explicite, consultez Propriétés d'interface (Guide de programmation C#).
Les interfaces et les membres d'interface sont abstraits ; les interfaces ne fournissent pas d'implémentation par défaut. Pour plus d'informations, consultez Classes et membres de classe abstract et sealed.
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 d'interfaces héritées par d'autres interfaces. Toutefois, la classe ne peut implémenter une interface qu'une seule fois, et uniquement si l'interface est déclarée dans le cadre de la définition de la classe, comme dans class ClassName : InterfaceName. Si l'interface est héritée parce que vous avez hérité de la classe de base qui implémente l'interface, son implémentation est fournie par la classe de base. Il est également possible qu'une classe de base implémente les membres d'interface à l'aide des membres virtuels. Dans ce cas, une classe dérivée peut modifier le comportement de l'interface en remplaçant les membres virtuels. Pour plus d'informations sur les membres virtuels, consultez Polymorphisme.
Vue d'ensemble des interfaces
Une interface possède les propriétés suivantes :
Une interface est semblable à une classe de base abstraite : tout type non abstract qui implémente 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 implémenter plusieurs interfaces.
Une d'interface peut elle-même hériter de plusieurs interfaces.
Dans cette section
Implémentation d'interface explicite (Guide de programmation C#)
Explique comment créer un membre de classe spécifique à une interface.Comment : implémenter de manière explicite des membres d'interface (Guide de programmation C#)
Fournit un exemple de la manière d'implémenter explicitement des membres d'interface.Comment : implémenter de manière explicite des membres de deux interfaces (Guide de programmation C#)
Fournit un exemple de la manière d'implémenter explicitement des membres d'interface par héritage.
Rubriques connexes
Propriétés d'interface (Guide de programmation C#)
Explique comment déclarer des propriétés sur une interface.Indexeurs dans les interfaces (Guide de programmation C#)
Explique comment déclarer des indexeurs sur une interface.Comment : implémenter des événements d'interface (Guide de programmation C#)
Montre comment une interface peut déclarer un événement.Classes et structs (Guide de programmation C#)
Décrit comment C# utilise des objets, des classes et des structs.Héritage (Guide de programmation C#)
Explique comment C# implémente l'héritage.Méthodes (guide de programmation C#)
Explique les concepts de méthodes nommées dans le modèle de programmation C#.Polymorphisme (Guide de programmation C#)
Décrit comment les classes peuvent être utilisées en C# comme plusieurs types.Classes abstract et sealed et membres de classe (Guide de programmation C#)
Décrit comment les mots clés abstract et sealed affectent l'héritage.Propriétés (Guide de programmation C#)
Explique le concept des propriétés en C#.Événements (Guide de programmation C#)
Explique le concept des événements en C#.Indexeurs (Guide de programmation C#)
Explique le concept des indexeurs en C#.
Chapitre proposé
Interfaces dans Learning C# 3.0: Master the Fundamentals of C# 3.0
Voir aussi
Référence
Héritage (Guide de programmation C#)
Concepts
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Juillet 2010 |
A différencié l'implémentation et l'héritage. A clarifié ce qui peut et ne peut pas être inclus dans les interfaces. |
Commentaires client. |