10
votes

C # Extension Méthodes - Modèles de conception

J'aimerais savoir si la méthode d'extension C # est basée sur tout modèle de conception existant.


1 commentaires

N'utilisez pas d'utilisation des méthodes d'extension, voir cette entrée Eric Lipperts Blog "Foreach V pour Acheach" blogs.msdn.com/ericlippert/archive/2009/05/18/...


10 Réponses :


5
votes

Non. C'est juste une fonctionnalité de langue.


1 commentaires

Cela peut être à la fois. Par exemple, les délégués sont une fonction de langue C # qui permet le modèle d'éditeur-abonné.



0
votes

Bien sûr, vous pouvez utiliser des méthodes d'extension C # si vous souhaitez mettre en œuvre certains modèles de conception. Par exemple simuler des mélanges en C #.


0 commentaires

0
votes

Je n'établirais pas les méthodes d'extension comme aucun des modèles de conception courants, mais il peut être utilisé pour mettre en œuvre des motifs tels que, décorateur et adaptateur, etc.


0 commentaires

2
votes

Ils ne sont pas basés sur un modèle de conception existant. Lorsque cette "fonctionnalité" a été introduite pour la première fois dans Delphi, sous le nom "Aides de classe" , Borland a même averti les utilisateurs d'eux. Ils ont été considérés comme un peu de hack , mais maintenant, la poussière s'est installée, ils ont trouvé leur propre place.

Comme tout le reste, utilisez le cas échéant.


0 commentaires

1
votes

Non, ils ne sont pas, car ils ne sont que du sucre syntaxique.


4 commentaires

Les méthodes d'extension bien strictement parlant sont pas Suntactic SuntaCtic. Mais votre capacité à les appeler avec la même syntaxe que les méthodes d'instance.


Si vous ne me croyez pas, vous pouvez simplement essayer de trouver dans Google cette phrase: «Les méthodes d'extension sont le sucre syntaxique» et vous pouvez trouver des centaines de liaisons qui prouvent mon opinion.


Rune, sans cette capacité de vulgarisation, ne sont que des méthodes statiques régulières. "Votre capacité à les appeler avec la même syntaxe que les méthodes d'instance" est la seule caractéristique des méthodes d'extension et, comme vous l'avez dit vous-même, cette fonctionnalité est syntaxique de sucre.


Quelle serait la syntaxe "acide" d'une extension si je voudrais m'en mettre moi-même?



11
votes

Un modèle de conception est simplement un paradigme bien connu, c'est-à-dire "quand vous voulez atteindre x, faites-vous". Un paradigme bien connu dans des langues orientées objet telles que c # est "lorsque vous souhaitez agir sur l'état d'un objet, appelez une méthode sur une instance de celle-ci".

Toutefois, avant la création de méthodes d'extension, vous ne pouvez pas appeler votre propre méthode sur une instance d'un objet que vous ne pouvez pas ajouter de mise en œuvre à (par exemple, les interfaces car elles ne peuvent pas avoir de mise en œuvre ou des classes de bibliothèque, car elles sont déjà compilées) . Les méthodes d'extension remplissent cet écart en vous permettant de faire des méthodes qui apparaissent à appeler sur des instances d'objets, tout en étant définis à l'extérieur de l'objet de l'objet.

Donc, oui, des méthodes d'extension sans doute sont basées sur ce modèle de conception très simple, de faire des méthodes qui agissent sur l'état d'un objet semblent être apportées à une instance de celle-ci.


1 commentaires

Ne serait-il pas semblable à un motif de décorateur mais avec une structure différente?





1
votes

Non, mais les méthodes d'extension sont excellentes pour la mise en œuvre de certains modèles de conception GOF (par exemple, prototype).


0 commentaires

0
votes

Le modèle de conception le mieux adapté à la méthode de l'extension est le motif de la façade. Ma raison: nous utilisons généralement des méthodes de vulgarisation pour ne pas introduire de nouvelles fonctionnalités au-delà de la responsabilité de la classe cible, mais simplifie l'utilisation de la classe cible existante. Parce que la simplification de l'utilisation de la classe cible est la préoccupation du modèle de façade, les méthodes d'extension peuvent également être implémentées à l'aide du modèle de façade. Certains problèmes sont des problèmes d'extension et d'extension de test unitaire. Je pense donc que la mise en œuvre du modèle de façade est une meilleure approche contre l'utilisation des méthodes d'extension. Cependant, il est possible de mettre en œuvre certaines méthodes d'extension qui enveloppent l'interface de la façade afin de fournir une installation de codage pour les codes client.


1 commentaires

Pourriez-vous élaborer votre réponse pour expliquer pourquoi?