背景:
ここでは数式の動的評価は主な関心事ではありません。目標は、.NET で実行時に新しいコードをコンパイルして実行することです。
問題ステートメント:
ユーザーは、テキスト ボックスに式を入力し、受信データ ポイント (「x」で表されます) に適用されます。彼らは、計算ごとに方程式テキストを解析するパフォーマンスのオーバーヘッドを排除する解決策を模索しています。
提案された解決策:
この解決策には、方程式を関数に変換することが含まれます。 fly では、解析が 1 回だけ必要になります。これは、ConvertEquationToCode() という名前のメソッドを使用して方程式を関数ポインターに変換することで実装できます。
.NET でのコードのコンパイルと実行:
コンパイルして実行するには.NET の新しいコード、Microsoft.CSharp、System.CodeDom.Compiler、System.Reflection などのライブラリを使用できます。以下は、メソッド (Add42) を使用してクラス (SomeClass) をコンパイルし、そのメソッドを呼び出すプロセスを示す例です。
using Microsoft.CSharp; using System; using System.CodeDom.Compiler; using System.Reflection; namespace RuntimeCompilationTest { class Program { static void Main(string[] args) { // Define the source code for the class with a method string sourceCode = @" public class SomeClass { public int Add42 (int parameter) { return parameter += 42; } }"; // Set up compiler parameters var compParms = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true }; // Create the code provider and compile the source code var csProvider = new CSharpCodeProvider(); CompilerResults compilerResults = csProvider.CompileAssemblyFromSource(compParms, sourceCode); // Create an instance of the compiled class object typeInstance = compilerResults.CompiledAssembly.CreateInstance("SomeClass"); // Get the method info and invoke the method MethodInfo mi = typeInstance.GetType().GetMethod("Add42"); int methodOutput = (int)mi.Invoke(typeInstance, new object[] { 1 }); // Display the method output Console.WriteLine(methodOutput); Console.ReadLine(); } } }
この例は、 での実行時に新しいコードをコンパイルして実行する中心的な概念を示しています。ネット。前述の名前空間とメソッドを利用することで、ユーザー入力やその他の実行時条件に基づいてカスタム関数を動的に作成して呼び出すことができます。
以上が.NET でユーザーが入力したコードを実行時にコンパイルして実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。