Hintergrund:
Die dynamische Auswertung mathematischer Ausdrücke steht hier nicht im Vordergrund . Ziel ist es, neuen Code zur Laufzeit in .NET zu kompilieren und auszuführen.
Problemstellung:
Der Benutzer benötigt die Fähigkeit, eine beliebige Gleichung in ein Textfeld einzugeben und Lassen Sie es auf eingehende Datenpunkte anwenden (dargestellt durch „x“). Sie suchen nach einer Lösung, die den Leistungsaufwand für das Parsen des Gleichungstexts für jede Berechnung eliminiert.
Vorgeschlagene Lösung:
Die Lösung besteht darin, die Gleichung in eine Funktion auf der zu übersetzen fliegen, was nur ein einmaliges Parsen erfordern würde. Dies kann implementiert werden, indem die Gleichung mithilfe einer Methode namens ConvertEquationToCode() in einen Funktionszeiger umgewandelt wird.
Codekompilierung und -ausführung in .NET:
Zum Kompilieren und Ausführen Für neuen Code in .NET können Bibliotheken wie Microsoft.CSharp, System.CodeDom.Compiler und System.Reflection eingesetzt werden. Hier ist ein Beispiel, das den Prozess des Kompilierens einer Klasse (SomeClass) mit einer Methode (Add42) und des anschließenden Aufrufs dieser Methode veranschaulicht:
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(); } } }
Dieses Beispiel demonstriert die Kernkonzepte des Kompilierens und Ausführens von neuem Code zur Laufzeit in . NETTO. Durch die Verwendung der oben genannten Namespaces und Methoden ist es möglich, benutzerdefinierte Funktionen basierend auf Benutzereingaben oder anderen Laufzeitbedingungen dynamisch zu erstellen und aufzurufen.
Das obige ist der detaillierte Inhalt vonWie kann ich vom Benutzer eingegebenen Code zur Laufzeit in .NET kompilieren und ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!