問題:
在執行時編譯並執行新程式碼是否可行. 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中文網其他相關文章!