3

我有一个看起来像这样的类:

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班级有关吗?

4

0 回答 0