Il y a quelque temps j'ai dû adresser un certain problème de conception de C# quand je mettais en application un cadre de génération de code de Javascript. L'une des solutions que j'ai trouvées consistait à utiliser le mot-clé "using" d'une manière totalement différente (hackish, if you please). Je l'ai utilisé comme une syntaxe de sucre (enfin, à l'origine c'est un de toute façon) pour construire une structure de code hiérarchique. Quelque chose qui ressemblait à ceci:Ab-using languages
CodeBuilder cb = new CodeBuilder();
using(cb.Function("foo"))
{
// Generate some function code
cb.Add(someStatement);
cb.Add(someOtherStatement);
using(cb.While(someCondition))
{
cb.Add(someLoopStatement);
// Generate some more code
}
}
Il fonctionne parce que la fonction et les méthodes de retour Alors que l'objet IDisposable, que, sur Éliminez, dit le constructeur de fermer la portée actuelle. Une telle chose peut être utile pour toute structure arborescente qui doit être codée en dur.
Pensez-vous que de tels «hacks» sont justifiés? Parce que vous pouvez dire qu'en C++, par exemple, beaucoup de fonctionnalités telles que les templates et la surcharge des opérateurs sont surexploitées et ce comportement est encouragé par beaucoup (regardez boost par exemple). D'un autre côté, vous pouvez dire que de nombreuses langues modernes découragent de tels abus et vous donnent des caractéristiques spécifiques, beaucoup plus restreintes.
Mon exemple est, bien sûr, quelque peu ésotérique, mais réel. Alors que pensez-vous du piratage spécifique et de l'ensemble du problème? Avez-vous rencontré des dilemmes similaires? Combien d'abus pouvez-vous tolérer?
bien, je dois regarder plus dans C# 3.0 – Untrots