2009-07-09 14 views
2

私はC#アプリケーションを持っています。クラスAの1つのパラメータを取り、doubleを返すためにテキストで定義された関数を実行したいとします。C#コードをプログラムでコンパイルして実行する

パラメータ「」いくつかの構造化データとなり、機能がA.

(想像AであったプロパティNUM1、NUM2、および1つの式平均値を返すように定義された、他の任意の時の式であろうreturn num1 * 2)。

このように、関数定義をテキストソースからロードし、何らかの方法でコンパイルして実行したいとします。

コードの構造に関しては、関数の本体を任意のクラスのメンバ関数に注入することもできますし、デリゲートをコンパイルしてそれを実行してパラメータコンテキストを渡すこともできますまた、十分であろう。

これについてはどのような方法がありますか?

+0

使用しているC#のバージョンを指定する必要があると思います。新しいバージョンでは古いバージョンよりも簡単にこれを行うことができます。 – MusiGenesis

+0

古い.NET 1.1バージョンは残念です。 –

答えて

3
+0

CodeDomはこの種の問題に最適です。しかし、CodeDomがサポートしていないC#のより高度な機能を使用する必要がある場合は、Reflection.Emitの使用を検討する必要があります。 –

+0

リンクが壊れています... – Tim

0

あなたは、C#コードのDOMを見てしたい場合があります。これを使用してC#コードを動的に記述してコンパイルし、実行することができます。

これは非常に危険な操作なので注意してください。それでも、環境にあるというクールな機能性。

0

C#code hereをコンパイルする方法に関するドキュメントがあります。あなたはそれがあなたのメソッドを呼び出すためにリフレクションを使用する必要があるとしているコンパイルされたら

あなたはILを使用する必要がありますLCGとの既存のクラスにそれを注入する場合(その静的を提供しました)。

0

これを行うもう1つのアプローチは、DynamicMethodクラスを使用することです。これにはILの知識が必要です。

私はこれが実行時にコンパイルするのが速いと思います。

1

優れた表現を入力でき、すべての基本機能(統計、文字列操作、数学/ trig)を含む式パーサーを使用することをお勧めします。私はCalcEngineを使用して同様の要件を満たしています。カスタム関数で拡張することができます。

関連する問題