J'aimerais savoir si la méthode d'extension C # est basée sur tout modèle de conception existant. P>
10 Réponses :
Non. C'est juste une fonctionnalité de langue. P>
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é.
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 #. P>
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. P>
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. p>
Comme tout le reste, utilisez le cas échéant. p>
Non, ils ne sont pas, car ils ne sont que du sucre syntaxique. P>
Les méthodes d'extension bien strictement parlant sont pas i> 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 i> 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?
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". p>
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 em> à appeler sur des instances d'objets, tout en étant définis à l'extérieur de l'objet de l'objet. P>
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. P>
Ne serait-il pas semblable à un motif de décorateur mais avec une structure différente?
Les méthodes d'extension peuvent être considérées comme un remplacement du modèle de visiteur . Il est également proposé de pouvoir être utilisé comme Adaptateurs a>. p>
Dans les langues générales évoluera de nécessiter la nécessité de modèles de conception moins nécessaires. Il existe une citation par exemple que LISP n'a pas besoin de modèles de conception, car tout est construit dans la langue. La bonne question sera donc, quels schémas de conception les méthodes d'extension remplacent-elles? P>
Plus précisément, (bonnes) langues tendent à évoluer pour rationaliser l'utilisation de modèles de conception populaires. Notez également que vous ne pouvez jamais vous échapper de l'utilisation de modèles de conception, chaque design est un modèle de conception de quelque sorte, la langue des modèles de conception n'est qu'un moyen de formaliser cette idée et de promouvoir l'utilisation de certains modèles bien connus et testés. (De la même manière qu'un arc ou une contrefaire est un modèle de conception bien connu en architecture).
Les modèles de conception canonique les plus proches sont probablement le modèle de décorateur . p>
Non, mais les méthodes d'extension sont excellentes pour la mise en œuvre de certains modèles de conception GOF (par exemple, prototype). P>
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. P>
Pourriez-vous élaborer votre réponse pour expliquer pourquoi?
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/...