2010-10-19 3 views
7

Fondamentalement ce que je voudrais savoir est s'il y a n'importe quel moyen d'ajouter de nouvelles «déclarations» aux langages .net basés? Un exemple de ce que je cherche serait quelque chose comme l'introduction d'un public class MyClass decoratorOf ClassWithLotsOfMethods et au moment de la pré-compilation changer cela pour être une classe normale qui remplace tout par défaut mais les méthodes que je définis.Extension du langage C#?

Un autre exemple serait le .net 3.5 propriétés auto, ou des méthodes d'extension, etc.

Ceci est juste pour le plaisir, pas que je veux vraiment faire, tout simplement curieux de savoir s'il est possible

Merci! Seba

+0

On dirait que vous pensez de la façon dont je voudrais comme les méthodes d'extension à travailler - si Foo est déclaré comme une classe d'extension de Bar, alors un objet déclaré comme Foo serait considéré comme une barre, sauf pour le traitement à la compilation des méthodes et propriétés auto-statiques de Foo qui seraient inconditionnellement ombre ceux de Bar (même lorsque les méthodes correspondantes existent dans Bar). Une telle conception permettrait aux membres d'être ajoutés à Bar sans casser le code qui utilise Foo, même si ces membres correspondent aux noms des extensions de Foo. Dommage, je ne connais aucun moyen de faire en sorte que le langage le supporte. – supercat

+0

@supercat: vous devriez jeter un oeil à [Scala implicits] (http://www.artima.com/weblogs/viewpost.jsp?thread=179766) –

Répondre

8

C# ne le permet pas. Vous pouvez bien sûr modifier l'IL générée avec un post-compilateur (comme CciSharp).

Certains langages .NET alternatifs autorisant les extensions sont Nemerle et Boo.

5

Il n'y a rien de intégré.

Vous pourriez bien sûr utiliser un préprocesseur mais cela ne vous rendra pas populaire.

+1

Oui, regardez Simula - tout ce qu'ils ont fait était d'inventer l'objet - programmation orientée. Ou C++ - ce n'est pas très populaire, n'est-ce pas? :-) – Ken

+0

@Ken: comment ajouter un pré-processeur le rendrait-il populaire? Et qu'est-ce que cela a à voir avec Simula (qui n'était pas vraiment une extension d'ALGOL)? –

+0

Je ne vois aucune raison de croire que l'utilisation d'un préprocesseur aurait un effet particulier sur sa popularité, car il y a de bons exemples de popularité extrême et d'impopularité avec et sans un. Et (si une douzaine d'histoires distinctes que j'ai trouvées sur Internet sont à croire) Simula a commencé sa vie en tant que préprocesseur pour Algol (comme C++ a commencé sa vie en tant que préprocesseur pour C), mais a bientôt pris vie posséder. – Ken

3

Pas que je connais, mais un coup d'oeil à PostSharp et T4 Templates et voir si cela peut résoudre votre problème :)

+0

J'ai déjà construit des décorateurs avec T4. Cela a bien fonctionné, et ne nécessitait rien d'autre à installer –

+0

T4 serait ma première option. –