Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengumpul dan Melaksanakan Kod yang Dimasukkan Pengguna pada Runtime dalam .NET?

Bagaimanakah Saya Boleh Mengumpul dan Melaksanakan Kod yang Dimasukkan Pengguna pada Runtime dalam .NET?

Mary-Kate Olsen
Lepaskan: 2024-12-31 08:19:10
asal
696 orang telah melayarinya

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

Penyusunan dan Pelaksanaan Kod Runtime dalam .NET

Latar Belakang:

Menilai ungkapan matematik secara dinamik bukanlah kebimbangan utama di sini . Matlamatnya adalah untuk menyusun dan melaksanakan kod baharu semasa runtime dalam .NET.

Pernyataan Masalah:

Pengguna memerlukan keupayaan untuk memasukkan sebarang persamaan ke dalam kotak teks dan adakah ia digunakan pada titik data masuk (diwakili oleh 'x'). Mereka mencari penyelesaian yang menghapuskan overhed prestasi menghurai teks persamaan untuk setiap pengiraan.

Penyelesaian Cadangan:

Penyelesaian melibatkan menterjemahkan persamaan kepada fungsi pada fly, yang hanya memerlukan penghuraian sekali. Ini boleh dilaksanakan dengan menukar persamaan kepada penuding fungsi menggunakan kaedah bernama ConvertEquationToCode().

Kod Penyusunan dan Pelaksanaan dalam .NET:

Untuk menyusun dan melaksanakan kod baharu dalam .NET, perpustakaan seperti Microsoft.CSharp, System.CodeDom.Compiler dan Sistem.Refleksi boleh digunakan. Berikut ialah contoh yang menggambarkan proses menyusun kelas (SomeClass) dengan kaedah (Add42) dan kemudian menggunakan kaedah itu:

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();
        }
    }
}
Salin selepas log masuk

Contoh ini menunjukkan konsep teras untuk menyusun dan melaksanakan kod baharu pada masa jalan dalam . BERSIH. Dengan menggunakan ruang nama dan kaedah yang dinyatakan di atas, adalah mungkin untuk mencipta dan menggunakan fungsi tersuai secara dinamik berdasarkan input pengguna atau keadaan masa jalan yang lain.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengumpul dan Melaksanakan Kod yang Dimasukkan Pengguna pada Runtime dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan