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(); } } }
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!