163 votes

Les méthodes d'extension peuvent-elles être appliquées aux interfaces ?

Est-il possible d'appliquer une méthode d'extension à une interface (question C#) ?

Il s'agit par exemple d'atteindre les objectifs suivants :

  1. créer une interface ITopology

  2. créer une méthode d'extension pour cette interface (par exemple, public static int CountNodes(this ITopology topologyIf) )

  3. alors, lors de la création d'une classe (par exemple MyGraph) qui implémente ITopology, elle aurait automatiquement l'extension Count Nodes.

De cette manière, les classes qui mettent en œuvre l'interface n'ont pas besoin d'avoir un nom de classe défini pour s'aligner sur ce qui a été défini dans la méthode d'extension.

226voto

Aaronaught Points 73049

Bien sûr qu'ils le peuvent ; la majeure partie de Linq est construite autour des méthodes d'extension d'interface.

Les interfaces ont en fait été l'une des forces motrices du développement des méthodes d'extension ; comme elles ne peuvent mettre en œuvre aucune de leurs propres fonctionnalités, les méthodes d'extension sont le moyen le plus simple d'associer du code réel aux définitions d'interfaces.

Voir le Enumérable pour toute une série de méthodes d'extension construites autour de la classe IEnumerable<T> . La mise en œuvre d'un tel système est identique à la mise en œuvre d'un système pour une classe :

public static class TopologyExtensions
{
    public static void CountNodes(this ITopology topology)
    {
        // ...
    }
}

Les méthodes d'extension n'ont rien de particulièrement différent en ce qui concerne les interfaces ; une méthode d'extension est simplement une méthode statique à laquelle le compilateur applique du sucre syntaxique pour donner l'impression que la méthode fait partie du type cible.

4voto

Pierreten Points 3583

Euh oui, regardez les extensions sur IEnumerable<> !!!

http://msdn.microsoft.com/en-us/library/19e6zeyy.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X