我有一个看起来像这样的类:
public class ClassWithFuncConstructor
{
public ClassWithFuncConstructor(Func<int> func)
{
}
}
现在我想使用DynamicMethod
该类来发出创建ClassWithFuncConstructor
类实例所需的代码,如下所示:
public void DynamicMethodPrototype()
{
var instance = new ClassWithFuncConstructor(() => 42);
}
如果我们看一下为这个原型编译的代码(来自 LinqPad),我们可以看到它创建了另一个方法,它是函数委托的主体,然后将指向该方法的指针作为构造函数参数传递。
DynamicMethodPrototype:
IL_0000: nop
IL_0001: ldsfld UserQuery.CS$<>9__CachedAnonymousMethodDelegate1
IL_0006: brtrue.s IL_001B
IL_0008: ldnull
IL_0009: ldftn UserQuery.<DynamicMethodPrototype>b__0
IL_000F: newobj System.Func<System.Int32>..ctor
IL_0014: stsfld UserQuery.CS$<>9__CachedAnonymousMethodDelegate1
IL_0019: br.s IL_001B
IL_001B: ldsfld UserQuery.CS$<>9__CachedAnonymousMethodDelegate1
IL_0020: newobj UserQuery+ClassWithFuncConstructor..ctor
IL_0025: stloc.0
IL_0026: ret
<DynamicMethodPrototype>b__0:
IL_0000: ldc.i4.s 2A
IL_0002: stloc.0
IL_0003: br.s IL_0005
IL_0005: ldloc.0
IL_0006: ret
问题是如何使用类来做到这一点DynamicMethod
?我需要创建一个新的匿名方法,也<DynamicMethodPrototype>b__0:
就是我可以将对该方法的引用传递给ClassWithFuncConstructor
类的构造函数。
这甚至可能与DynamicMethod
班级有关吗?