我想知道是否可以在C#中实现自己的语言结构(如lock或foreach)?
背后的想法是我想标记一块操作的开始和结束。 而不是写作
startblock("blockname");
blabla();
andsoon();
endblock();
我想写点像
block("blockname"){
blabla();
test();
}
谢谢你!
答案 0 :(得分:16)
不,你不能。但是使用IDisposable
有一种解决方法。您可以在Dispose
中创建一个表示构造函数和块结尾的块开始的类。然后将代码包装到using
中。更多信息:
答案 1 :(得分:9)
另一个选择是将函数传递给处理程序。
private void block(string name, Action action)
{
startblock(name);
action();
endblock();
}
其次是:
block("blockname", () =>
{
blabla();
test();
});
请注意,这可能表示您需要抽象类(或常规基类),并允许覆盖该方法。
答案 2 :(得分:8)
您需要它的目的是什么?只是为了清晰的写作和清洁代码? C#不是可扩展的语言。 通过使用,您可以很好地实现这一目标:
using (new Context("block name"))
{
// do your staff here
}
class Context : IDisposable
{
public Context(string name)
{
// init context
}
public void Dispose()
{
// finish work in context
}
}
答案 3 :(得分:1)
Nemerle提供了类似这样的结构。它与C#并没有太大不同。