2

msil オペコードなどに興味を持ちました。通常は C# でプログラミングし、Reflection.Emit / MethodBuilder でメソッドを動的に生成しようとしましたが、これにはオペコードが必要です。

C# を msil に解析し、これを Method Builder で使用してメソッドを動的に生成できるかどうかに興味がありましたか?

リフレクションと C# コードを使用して、実行時にメソッドを動的に生成することは可能ですか?

4

1 に答える 1

8

式ツリーCodeDomなどを見ることができますCSharpCodeProvider

using System.CodeDom.Compiler;
using Microsoft.CSharp;

// ...

string source = @"public static class C
                  {
                      public static void M(int i)
                      {
                          System.Console.WriteLine(""The answer is "" + i);
                      }
                  }";

Action<int> action;
using (var provider = new CSharpCodeProvider())
{
    var options = new CompilerParameters { GenerateInMemory = true };
    var results = provider.CompileAssemblyFromSource(options, source);
    var method = results.CompiledAssembly.GetType("C").GetMethod("M");
    action = (Action<int>)Delegate.CreateDelegate(typeof(Action<int>), method);
}
action(42);    // displays "The answer is 42"
于 2012-05-29T13:13:54.240 に答える