質問:
.NET での実行時に新しいコードをコンパイルして実行することは可能ですか? .NET、ユーザーが入力した式を次のように変換する可能性があります。関数?
答え:
はい、.NET では実行時に新しいコードをコンパイルして実行できます。これは、Microsoft.CSharp、System.CodeDom.Compiler、および System.Reflection 名前空間内のさまざまなクラスを利用することで実現できます。
実装:
簡略化された C# を次に示します。これを示すコンソール アプリケーション機能:
using Microsoft.CSharp; using System; using System.CodeDom.Compiler; using System.Reflection; namespace RuntimeCompilationTest { class Program { static void Main(string[] args) { string sourceCode = @" public class SomeClass { public int Add42(int parameter) { return parameter += 42; } }"; // Define compilation parameters CompilerParameters compParms = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true }; // Compile the source code using CSharpCodeProvider 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 Add42 method MethodInfo mi = typeInstance.GetType().GetMethod("Add42"); // Invoke the method int methodOutput = (int)mi.Invoke(typeInstance, new object[] { 1 }); // Output the result Console.WriteLine(methodOutput); Console.ReadLine(); } } }
説明:
この例では、「Add42」メソッドを使用して仮想の「SomeClass」のソース コードを定義します。 CSharpCodeProvider を使用すると、メモリ内でソース コードをコンパイルできます。コンパイルが完了したら、SomeClass のインスタンスを作成し、Add42 メソッドの MethodInfo を取得します。最後に、メソッドを呼び出してその出力を出力し、新しくコンパイルされたコードが .NET でどのように動的に実行されるかを示します。
以上が.NET は実行時にコードをコンパイルして実行でき、ユーザー入力からの動的な関数の作成を可能にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。