背景:
動態計算數學表達式不是這裡的主要關注點。目標是在 .NET 執行時編譯並執行新程式碼。
問題陳述:
使用者需要能夠在文字方塊中輸入任何方程,並將其應用於傳入資料點(由「x」表示)。他們尋求一種解決方案,消除每次計算時解析方程式文字的效能開銷。
建議的解:
解包含將方程式轉換為Fly,只需要解析一次。這可以透過使用名為 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中文網其他相關文章!