Interfaces (Guide de programmation C#)Interfaces (C# Programming Guide)

Une interface contient des définitions pour un groupe de fonctionnalités connexes qu'une classe ou un struct peuvent implémenter.An interface contains definitions for a group of related functionalities that a class or a struct can implement.

En utilisant des interfaces, vous pouvez, par exemple, inclure le comportement de plusieurs sources dans une classe.By using interfaces, you can, for example, include behavior from multiple sources in a class. Cette fonctionnalité est importante en C#, car le langage ne prend pas en charge l'héritage multiple de classes.That capability is important in C# because the language doesn't support multiple inheritance of classes. De plus, vous devez utiliser une interface si vous voulez simuler l'héritage pour des structs, car ils ne peuvent en fait pas hériter d'un autre struct ou d'une autre classe.In addition, you must use an interface if you want to simulate inheritance for structs, because they can't actually inherit from another struct or class.

Vous définissez une interface à l'aide du mot clé interface,You define an interface by using the interface keyword. comme le montre l’exemple suivant.as the following example shows.

interface IEquatable<T>
{
    bool Equals(T obj);
}

Le nom du struct doit être un nom d’identificateur C# valide.The name of the struct must be a valid C# identifier name. Par convention, les noms d’interface commencent par un I majuscule.By convention, interface names begin with a capital I.

Toute classe ou tout struct qui implémentent l'interface IEquatable<T> doivent contenir une définition pour une méthode Equals qui correspond à la signature spécifiée par l'interface.Any class or struct that implements the IEquatable<T> interface must contain a definition for an Equals method that matches the signature that the interface specifies. Ainsi, vous pouvez compter sur une classe qui implémente IEquatable<T> pour contenir une méthode Equals avec laquelle une instance de la classe peut déterminer si elle est égale à une autre instance de la même classe.As a result, you can count on a class that implements IEquatable<T> to contain an Equals method with which an instance of the class can determine whether it's equal to another instance of the same class.

La définition de IEquatable<T> ne fournit pas d'implémentation pour Equals.The definition of IEquatable<T> doesn’t provide an implementation for Equals. L'interface définit uniquement la signature.The interface defines only the signature. De cette façon, une interface en C# est semblable à une classe abstraite dans laquelle toutes les méthodes sont abstraites.In that way, an interface in C# is similar to an abstract class in which all the methods are abstract. En revanche, une classe ou un struct peuvent implémenter plusieurs interfaces, mais une classe peut uniquement hériter d'une seule classe, abstraite ou non.However, a class or struct can implement multiple interfaces, but a class can inherit only a single class, abstract or not.

Pour plus d’informations sur les classes abstraites, consultez Classes abstract et sealed et membres de classe.For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

Les interfaces peuvent contenir des méthodes, propriétés, événements, indexeurs ou toute combinaison de ces quatre types de membres.Interfaces can contain methods, properties, events, indexers, or any combination of those four member types. Pour obtenir des liens vers des exemples, consultez les Sections connexes.For links to examples, see Related Sections. Une interface ne peut pas contenir de constantes, champs, opérateurs, constructeurs d'instance, finaliseurs ou types.An interface can't contain constants, fields, operators, instance constructors, finalizers, or types. Les membres d’interface sont automatiquement publics et ils ne peuvent pas inclure de modificateurs d’accès.Interface members are automatically public, and they can't include any access modifiers. Les membres ne peuvent pas non plus être statiques.Members also can't be static.

Pour implémenter un membre d'interface, le membre correspondant de la classe d'implémentation doit être public, non statique et porter le même nom et la même signature que le membre d'interface.To implement an interface member, the corresponding member of the implementing class must be public, non-static, and have the same name and signature as the interface member.

Quand une classe ou un struct implémentent une interface, la classe ou le struct doivent fournir une implémentation pour tous les membres que l'interface définit.When a class or struct implements an interface, the class or struct must provide an implementation for all of the members that the interface defines. L'interface elle-même n'offre aucune fonctionnalité dont une classe ou un struct peuvent hériter de la manière qu'ils peuvent hériter d'une fonctionnalité de classe de base.The interface itself provides no functionality that a class or struct can inherit in the way that it can inherit base class functionality. Toutefois, si une classe de base implémente une interface, toute classe dérivée de la classe de base hérite de cette implémentation.However, if a base class implements an interface, any class that's derived from the base class inherits that implementation.

L'exemple suivant illustre une implémentation de l'interface IEquatable<T>.The following example shows an implementation of the IEquatable<T> interface. La classe d'implémentation, Car, doit fournir une implémentation de la méthode Equals.The implementing class, Car, must provide an implementation of the Equals method.

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)
    {
        return this.Make == car.Make &&
               this.Model == car.Model &&
               this.Year == car.Year;
    }
}

Les propriétés et indexeurs d’une classe peuvent définir des accesseurs supplémentaires pour une propriété ou un indexeur qui est défini dans une interface.Properties and indexers of a class can define extra accessors for a property or indexer that's defined in an interface. Par exemple, une interface peut déclarer une propriété qui a un accesseur get.For example, an interface might declare a property that has a get accessor. La classe qui implémente l’interface peut déclarer la même propriété avec à la fois un accesseur get et un accesseur set.The class that implements the interface can declare the same property with both a get and set accessor. Toutefois, si la propriété ou l’indexeur utilisent une implémentation explicite, les accesseurs doivent correspondre.However, if the property or indexer uses explicit implementation, the accessors must match. Pour plus d'informations sur l'implémentation explicite, consultez les pages Implémentation d'interface explicite et Propriétés d'interface.For more information about explicit implementation, see Explicit Interface Implementation and Interface Properties.

Les interfaces peuvent hériter d’autres interfaces.Interfaces can inherit from other interfaces. Une classe peut inclure une interface plusieurs fois par le biais de classes de base qu’elle hérite ou d’interfaces dont d’autres interfaces héritent.A class might include an interface multiple times through base classes that it inherits or through interfaces that other interfaces inherit. Toutefois, la classe peut fournir une implémentation d'une interface une seule fois et uniquement si la classe déclare l'interface dans le cadre de la définition de la classe (class ClassName : InterfaceName).However, the class can provide an implementation of an interface only one time and only if the class declares the interface as part of the definition of the class (class ClassName : InterfaceName). Si l'interface est héritée car vous avez hérité d'une classe de base qui implémente l'interface, la classe de base fournit l'implémentation des membres de l'interface.If the interface is inherited because you inherited a base class that implements the interface, the base class provides the implementation of the members of the interface. Toutefois, la classe dérivée peut réimplémenter des membres d’interface virtuels au lieu d’utiliser l’implémentation héritée.However, the derived class can reimplement any virtual interface members instead of using the inherited implementation.

Une classe de base peut également implémenter des membres d'interface à l'aide de membres virtuels.A base class can also implement interface members by using virtual members. Dans ce cas, une classe dérivée peut modifier le comportement de l'interface en substituant les membres virtuels.In that case, a derived class can change the interface behavior by overriding the virtual members. Pour plus d'informations sur les membres virtuels, consultez la page Polymorphisme.For more information about virtual members, see Polymorphism.

Résumé des interfacesInterfaces summary

Une interface possède les propriétés suivantes :An interface has the following properties:

  • Une interface est comme une classe de base abstraite avec uniquement des membres abstraits.An interface is like an abstract base class with only abstract members. Toute classe ou tout struct qui implémentent l'interface doivent implémenter tous ses membres.Any class or struct that implements the interface must implement all its members.
  • Une interface ne peut pas être instanciée directement.An interface can't be instantiated directly. Ses membres sont implémentées par une classe ou un struct qui implémentent l'interface.Its members are implemented by any class or struct that implements the interface.
  • Les interfaces peuvent contenir des événements, des indexeurs, des méthodes et des propriétés.Interfaces can contain events, indexers, methods, and properties.
  • Les interfaces ne contiennent aucune implémentation de méthodes.Interfaces contain no implementation of methods.
  • Une classe ou un struct peuvent implémenter plusieurs interfaces.A class or struct can implement multiple interfaces. Une classe peut hériter d'une classe de base et également implémenter une ou plusieurs interfaces.A class can inherit a base class and also implement one or more interfaces.

Dans cette sectionIn this section

Implémentation d’interface expliciteExplicit Interface Implementation
Explique comment créer un membre de classe spécifique à une interface.Explains how to create a class member that’s specific to an interface.

Guide pratique pour implémenter de manière explicite des membres d’interfaceHow to: Explicitly Implement Interface Members
Fournit un exemple montrant comment implémenter explicitement des membres d'interface.Provides an example of how to explicitly implement members of interfaces.

Guide pratique pour implémenter de manière explicite des membres de deux interfacesHow to: Explicitly Implement Members of Two Interfaces
Fournit un exemple montrant comment implémenter explicitement des membres d'interface avec héritage.Provides an example of how to explicitly implement members of interfaces with inheritance.

Sections connexesRelated Sections

Interfaces dans Learning C# 3.0: Master the Fundamentals of C# 3.0Interfaces in Learning C# 3.0: Master the Fundamentals of C# 3.0

Voir aussiSee also