首頁 > 後端開發 > C++ > 如何在 .NET 中在執行時編譯並執行使用者輸入的程式碼?

如何在 .NET 中在執行時編譯並執行使用者輸入的程式碼?

Mary-Kate Olsen
發布: 2024-12-31 08:19:10
原創
697 人瀏覽過

How Can I Compile and Execute User-Inputted Code at Runtime in .NET?

.NET 中的運行時代碼編譯和執行

背景:

動態計算數學表達式不是這裡的主要關注點。目標是在 .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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板