Некоторое время назад мне приходилось решать определенную проблему с дизайном C#, когда я выполнял фреймворк для генерации кода JavaScript. Одним из решений, с которыми я пришел, было использование ключевого слова «using» в совершенно другом (хакерском, если угодно) пути. Я использовал его как синтаксический сахар (ну, изначально он один) для построения иерархической структуры кода. То, что выглядело так: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
}
}
Это работает, потому что функции и методы возвращают в то время как IDisposable объект, который, по отчуждать, говорит строитель, чтобы закрыть текущую область. Такая вещь может быть полезна для любой древовидной структуры, которая должна быть жесткой.
Считаете ли вы, что такие «хаки» оправданы? Поскольку вы можете сказать, что в C++, например, многие из таких функций, как шаблоны и перегрузка операторов, подвергаются чрезмерному злоупотреблению, и это поведение поощряется многими (посмотрите, например, на повышение). С другой стороны, вы можете сказать, что многие современные языки препятствуют таким злоупотреблениям и дают вам конкретные, гораздо более ограниченные функции.
Мой пример, конечно, несколько эзотерический, но настоящий. Итак, что вы думаете о конкретном хаке и всей проблеме? Вы столкнулись с подобными дилеммами? Сколько злоупотреблений вы можете терпеть?
приятно, мне нужно больше смотреть в C# 3.0 – Untrots