배경:
수학 표현식을 동적으로 평가하는 것은 여기서 주요 관심사가 아닙니다. . 목표는 .NET에서 런타임에 새 코드를 컴파일하고 실행하는 것입니다.
문제 설명:
사용자는 텍스트 상자에 방정식을 입력하고 들어오는 데이터 포인트('x'로 표시)에 적용되도록 합니다. 그들은 계산할 때마다 방정식 텍스트를 구문 분석하는 성능 오버헤드를 제거하는 솔루션을 찾고 있습니다.
제안된 솔루션:
해결책에는 방정식을 함수로 변환하는 작업이 포함됩니다. 한 번만 구문 분석하면 됩니다. 이는 ConvertEquationToCode()라는 메서드를 사용하여 방정식을 함수 포인터로 변환하여 구현할 수 있습니다.
.NET에서 코드 컴파일 및 실행:
컴파일하고 실행하려면 .NET의 새로운 코드에서는 Microsoft.CSharp, System.CodeDom.Compiler 및 System.Reflection과 같은 라이브러리를 사용할 수 있습니다. 다음은 클래스(SomeClass)를 메서드(Add42)로 컴파일한 후 해당 메서드를 호출하는 프로세스를 보여주는 예입니다.
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(); } } }
이 예는 NET에서 런타임 시 새 코드를 컴파일하고 실행하는 핵심 개념을 보여줍니다. 그물. 앞서 언급한 네임스페이스와 메소드를 활용하면 사용자 입력이나 기타 런타임 조건을 기반으로 사용자 정의 함수를 동적으로 생성하고 호출할 수 있습니다.
위 내용은 .NET에서 런타임에 사용자 입력 코드를 어떻게 컴파일하고 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!