我可以使用Roslyn进行编译时代码重写吗?

dot*_*ter 16 c# metaprogramming compiler-as-a-service roslyn

比如我有

class Foo: INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;
    public int Bar {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我可以在编译时获取Foo类AST并重写Bar

    public string Bar
    {
        get { return this.bar; }

        set 
        {
            if (value != this.bar)
            {
                this.phoneNumberValue = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Bar"));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

.

Kev*_*lch 16

Roslyn今天没有直接支持编译时重写,但语法和语义转换肯定是.实际上,请查看CTP中包含的"ImplementNotifyPropertyChanged"示例,以查看您要执行的操作.该示例在IDE功能中实现为设计时转换,但您可以提取逻辑并使其成为类似于在编译之前重写文件的预构建任务.

  • @ KevinPilch-Bisson后来的另一年和一些OSS发布,是否可能在Roslyn的AOP? (7认同)
  • Ivan Towlson还发表了关于自动"DependencyProperty"实现的博客 - http://www.mindscapehq.com/blog/index.php/2011/10/20/in-bed-with-roslyn/ (3认同)
  • Java具有“注释”,使您可以参与编译过程并进行多年的编译时间代码生成。微软似乎以某种方式不想以某种方式使我们免受自身的影响,从而使我们中的一些人觉得您像对待孩子一样对待我们。Java中的注释(以及它们提供的生成/重新编译周期)当然不会导致混乱或混乱,它是一个非常强大的系统。 (2认同)
  • 现在,有可能吗? (2认同)
  • 另一年.现在? (2认同)