Quand utiliser des délégués au lieu d'interfaces (Guide de programmation C#)

Les délégués et les interfaces permettent à un Concepteur de classes de séparer les déclarations de type et l'implémentation. Une interface donnée peut être héritée et implémentée par toute classe ou struct. Un délégué peut être créé pour une méthode sur toute classe, tant que la méthode correspond à la signature de méthode pour le délégué. Une référence d'interface ou un délégué peut être utilisé par un objet qui n'a aucune connaissance de la classe qui implémente l'interface ou la méthode déléguée. Étant donné ces ressemblances, quand un Concepteur de classes doit-il utiliser un délégué et quand doit-il utiliser une interface ?

Utilisez un délégué dans les cas suivants :

  • un modèle de design d'événement est utilisé.

  • il est souhaitable d'encapsuler une méthode statique.

  • l'appelant n'a aucun besoin d'accéder aux autres propriétés, méthodes ou interfaces sur l'objet qui implémente la méthode.

  • une facilité de composition est souhaitée.

  • une classe peut avoir besoin de plusieurs implémentations de la méthode.

Utilisez une interface dans les cas suivants :

  • Il existe un groupe de méthodes connexes pouvant être appelé.

  • Une classe a besoin d'une seule implémentation de la méthode.

  • La classe qui utilise l'interface souhaite effectuer un cast de cette interface vers d'autres types d'interfaces ou de classes.

  • La méthode qui est implémentée est liée au type ou à l'identité de la classe : par exemple, les méthodes de comparaison.

IComparable ou la version générique, IComparable<T>, illustre parfaitement le cas où une interface à méthode unique est utilisée à la place d'un délégué. IComparable déclare la méthode CompareTo, qui retourne un entier spécifiant une relation d'infériorité, d'égalité ou de supériorité entre deux objets du même type. L'interface IComparable peut être utilisée comme base d'un algorithme de tri. Bien qu'il soit possible d'utiliser une méthode de comparaison des délégués comme base d'un algorithme de tri, ce n'est pas la solution idéale. Étant donné que la capacité de comparer appartient à la classe et que l'algorithme de comparaison ne change pas lors de l'exécution, une interface à méthode unique est idéale.

Voir aussi

Référence

Événements (Guide de programmation C#)

Méthodes (guide de programmation C#)

Interfaces (Guide de programmation C#)

Concepts

Guide de programmation C#