16

たとえば、私は持っています

class Foo: INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;
    public int Bar {get;set;}
}

FooクラスASTを取得し、コンパイル時にBarを次のように書き換えることはできますか?

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

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

4

2 に答える 2

16

コンパイル時の書き換えは、今日Roslynによって直接サポートされていませんが、構文変換とセマンティック変換は間違いなくサポートされています。実際、CTPに含まれている「ImplementNotifyPropertyChanged」サンプルを見て、やりたいことを確認してください。サンプルは、IDE機能の設計時変換として実装されていますが、ロジックを抽出して、コンパイル前にファイルを再書き込みするビルド前タスクのようなものにすることができます。

于 2011-10-20T16:54:10.737 に答える
2

コンパイラがサービスとして提供されているため、現在リリースされているCTPではこれが不可能だと思いますが、Nemerleのようにコンパイルプロセスにプラグインできるようなものはありません。

于 2011-10-20T10:13:38.543 に答える