前段时间,我在实现JavaScript代码生成框架时不得不解决某个C#设计问题。我提供的解决方案之一是使用“使用”关键字完全不同(如果您愿意,可以采用骇人听闻的方式)。我用它作为语法糖(好吧,原来它是一个),用于构建分层代码结构。东西是这样的: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++中,模板和运算符重载等许多功能都被滥用,这种行为受到许多人的鼓励(例如看看boost)。另一方面,你可以说许多现代语言不鼓励这种滥用,并给你特定的,更多的限制性功能。
我的例子当然有点深奥,但却是真实的。那么你怎么看待特定的黑客攻击和整个问题呢?你遇到过类似的困境吗?你可以容忍多少滥用?
不错,我不得不看更多的C#3.0 – Untrots 2009-02-19 13:31:03