Pouvons-nous générer un nouveau code et l'exécuter à la volée dans .NET ?
Vous souhaitez permettre aux utilisateurs de saisir des équations dans une zone de texte et appliquez-les aux points de données entrants. Même si l'analyse du texte de l'équation pour chaque calcul était votre approche initiale, vous recherchez une solution plus efficace : compiler l'équation en fonction au moment de l'exécution.
Dans .NET, cela est en effet possible en utilisant les techniques trouvées dans Microsoft. Espaces de noms CSharp, System.CodeDom.Compiler et System.Reflection. Une simple application console peut illustrer ce concept :
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(); } } }
Dans ce code :
Cette démonstration montre la possibilité de compiler et d'exécuter nouveau code 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!