前段时间,我在实现 JavaScript 代码生成框架时不得不解决某个 C# 设计问题。我提出的解决方案之一是以完全不同的方式使用“使用”关键字(如果你愿意的话,这是骇人听闻的)。我将它用作构建分层代码结构的语法糖(好吧,本来它就是一个)。看起来像这样的东西:
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
}
}
它之所以有效,是因为 Function 和 While 方法返回 IDisposable 对象,该对象在处置时会告诉构建器关闭当前范围。这样的东西对于任何需要硬编码的树状结构都有帮助。
你认为这样的“黑客”是合理的吗?因为您可以说,例如,在 C++ 中,模板和运算符重载等许多特性都被过度滥用了,而且这种行为受到许多人的鼓励(例如 boost)。另一方面,您可以说许多现代语言不鼓励这种滥用,并为您提供特定的、更受限制的功能。
当然,我的例子有些深奥,但真实。那么您如何看待具体的黑客攻击和整个问题?你遇到过类似的困境吗?你能容忍多少虐待?