Rumah >pembangunan bahagian belakang >C++ >Bolehkah .NET Menyusun dan Menjalankan Kod Secara Dinamik pada Runtime?

Bolehkah .NET Menyusun dan Menjalankan Kod Secara Dinamik pada Runtime?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 11:28:39192semak imbas

Can .NET Compile and Run Code Dynamically at Runtime?

Bolehkah kita Menjana Kod Baharu dan Menjalankannya on-the-Fly dalam .NET?

Anda ingin memperkasakan pengguna untuk memasukkan persamaan ke dalam kotak teks dan minta ia digunakan pada titik data masuk. Walaupun menghuraikan teks persamaan untuk setiap pengiraan adalah pendekatan awal anda, anda mencari penyelesaian yang lebih cekap: menyusun persamaan menjadi fungsi pada masa jalan.

Dalam .NET, ini sememangnya boleh dilakukan menggunakan teknik yang terdapat dalam Microsoft. Ruang nama CSharp, System.CodeDom.Compiler dan System.Reflection. Aplikasi konsol ringkas boleh menggambarkan konsep ini:

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 SomeClass class
            string sourceCode = @"
                public class SomeClass {
                    public int Add42 (int parameter) {
                        return parameter += 42;
                    }
                }";

            // Set up compilation parameters
            var compParms = new CompilerParameters{
                GenerateExecutable = false, 
                GenerateInMemory = true
            };

            // Create a C# code provider
            var csProvider = new CSharpCodeProvider();

            // Compile the source code
            CompilerResults compilerResults = 
                csProvider.CompileAssemblyFromSource(compParms, sourceCode);

            // Create an instance of the SomeClass type
            object typeInstance = 
                compilerResults.CompiledAssembly.CreateInstance("SomeClass");

            // Get the Add42 method
            MethodInfo mi = typeInstance.GetType().GetMethod("Add42");

            // Invoke the Add42 method and display the output
            int methodOutput = 
                (int)mi.Invoke(typeInstance, new object[] { 1 }); 
            Console.WriteLine(methodOutput);
            Console.ReadLine();
        }
    }
}

Dalam kod ini:

  • Kod sumber ditakrifkan untuk kelas SomeClass yang mengandungi kaedah Add42.
  • Konfigurasi untuk penyusunan kod disediakan melalui compParms.
  • csProvider menyusun sumber kod.
  • Satu contoh SomeClass dicipta.
  • Kaedah Add42 digunakan dan outputnya dipaparkan.

Demonstrasi ini mempamerkan keupayaan untuk menyusun dan melaksanakan kod baharu secara dinamik dalam .NET.

Atas ialah kandungan terperinci Bolehkah .NET Menyusun dan Menjalankan Kod Secara Dinamik pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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