これは、簡単にプログラム変換システムで行うことができます。
DMS Software Reengineering Toolkitは、一般的なプログラム変換システムであり、多くの言語(C++、COBOL、Java、EcmaScript、Fortran、..)、特にC#で使用できます。
DMSは抽象構文木を構築し、ソースからソースへのパターンを適用して、任意のプロパティを使用してコードをあるC#プログラムから別のものに変換することができます。正確にあなたが指定したタスクは次のようになり達成するための変換ルール:
domain CSharp.
insert_trace():method->method
"[Trace]
\visibility \returntype \methodname(string \parametername)
{ \body } "
->
"\visibility \returntype \methodname(string \parametername)
{ Log.Trace(\CSharpString\(\methodname\),
\CSharpString\(\parametername\),
\parametername);
\body } "
引用符( ")CSHARP引用符ではありません。むしろ、それらは、『ドメイン引用符』、および引用符内のそのコンテンツを示しています\ fooという表記は、メタ構文です。CSHARP構文(我々が言ったので、「ドメインCSHARP」)である。
このルールは、あなたがで[トレース]注釈をを指定したメソッドを表すASTと一致し、にそのASTを書き換え結果のASTは、ソース形式にプリポートされ、コンパイルすることができます。他の引数の組み合わせを扱うためにはおそらく他の規則が必要です; f実際には、引数処理を一般化して、各スカラー引数の文字列値を(実用的なところで)生成することになります。
あなたが任意の変換だけでなく、アクションの前に、後を表現することができますので、あなたは、単にアスペクト指向プログラミングよりも、これだけでログインするよりも多く、そしてより多くを行うことができます明確にする必要があります。
私はPostSharpenedコードのパフォーマンスを決して研究したことはありませんが、PostSharpシムが大きな違いを生み出したら驚くでしょう。 – RichieHindle
私はPostSharp Loas(PostSharp用のAOPプラグイン)でやりたいことはできませんが、私はPostSharp用のカスタムAOPプラグインを書くことでそれを行うことができます。 PostSharp Loasは実行時のパフォーマンスに影響を与えるかもしれませんが、私のカスタムプラグインはコンパイル時のみであるため、実行されません。 –