Maison > développement back-end > C++ > .NET peut-il compiler et exécuter du code au moment de l'exécution, permettant ainsi la création de fonctions dynamiques à partir de l'entrée de l'utilisateur ?

.NET peut-il compiler et exécuter du code au moment de l'exécution, permettant ainsi la création de fonctions dynamiques à partir de l'entrée de l'utilisateur ?

Mary-Kate Olsen
Libérer: 2025-01-02 12:39:39
original
136 Les gens l'ont consulté

Can .NET Compile and Execute Code at Runtime, Enabling Dynamic Function Creation from User Input?

Compilation de code dynamique dans .NET

Question :

Est-il possible de compiler et d'exécuter un nouveau code pendant l'exécution dans .NET, transformant potentiellement les équations saisies par l'utilisateur en fonctions ?

Réponse :

Oui, il est possible de compiler et d'exécuter du nouveau code au moment de l'exécution dans .NET. Ceci peut être réalisé en exploitant diverses classes dans les espaces de noms Microsoft.CSharp, System.CodeDom.Compiler et System.Reflection.

Implémentation :

Voici un C# simplifié application console qui le démontre fonctionnalité :

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();
        }
    }
}
Copier après la connexion

Explication :

Dans cet exemple, nous définissons le code source de notre hypothétique "SomeClass" avec une méthode "Add42". Grâce au CSharpCodeProvider, nous pouvons compiler le code source en mémoire. Une fois compilé, nous créons une instance de SomeClass et récupérons le MethodInfo de la méthode Add42. Enfin, nous invoquons la méthode et imprimons sa sortie, démontrant comment le code nouvellement compilé peut être exécuté dynamiquement dans .NET.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal