ホームページ >バックエンド開発 >C++ >.NET は実行時にコードをコンパイルして実行でき、ユーザー入力からの動的な関数の作成を可能にしますか?

.NET は実行時にコードをコンパイルして実行でき、ユーザー入力からの動的な関数の作成を可能にしますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-02 12:39:39145ブラウズ

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

.NET での動的コードのコンパイル

質問:

.NET での実行時に新しいコードをコンパイルして実行することは可能ですか? .NET、ユーザーが入力した式を次のように変換する可能性があります。関数?

答え:

はい、.NET では実行時に新しいコードをコンパイルして実行できます。これは、Microsoft.CSharp、System.CodeDom.Compiler、および System.Reflection 名前空間内のさまざまなクラスを利用することで実現できます。

実装:

簡略化された C# を次に示します。これを示すコンソール アプリケーション機能:

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

説明:

この例では、「Add42」メソッドを使用して仮想の「SomeClass」のソース コードを定義します。 CSharpCodeProvider を使用すると、メモリ内でソース コードをコンパイルできます。コンパイルが完了したら、SomeClass のインスタンスを作成し、Add42 メソッドの MethodInfo を取得します。最後に、メソッドを呼び出してその出力を出力し、新しくコンパイルされたコードが .NET でどのように動的に実行されるかを示します。

以上が.NET は実行時にコードをコンパイルして実行でき、ユーザー入力からの動的な関数の作成を可能にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。