我们可以用C#编写自己的语言结构吗?

时间:2010-08-24 09:19:03

标签: c#

我想知道是否可以在C#中实现自己的语言结构(如lock或foreach)?

背后的想法是我想标记一块操作的开始和结束。 而不是写作

startblock("blockname");
  blabla();
  andsoon();
endblock();

我想写点像

block("blockname"){
  blabla();
  test();
}
谢谢你!

4 个答案:

答案 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#并没有太大不同。