具有新实例的C#反射发射函数

时间:2018-12-26 11:32:46

标签: c# reflection func reflection.emit

我正在尝试通过反射发出以下代码:

 this.Inputs = new DynamicCollection<IFunctionInput<Digital>>((string name) => new FunctionInput<Digital>(this, name));

DynamicCollection的ctor具有一个函数,看起来像:

public DynamicCollection ( Func<string, T> createPin )

但是当我查看编译的IL代码时,它给了我:

IL_0008: ldarg.0
    IL_0009: ldarg.0
    IL_000a: ldftn instance class [CM.Shared]CM.Shared.IFunctionInput`1<valuetype [CM.Shared]CM.Shared.Digital> CM.Server.LogicalAndFunctionServer::'<.ctor>b__0_0'(string)
    IL_0010: newobj instance void class [mscorlib]System.Func`2<string, class [CM.Shared]CM.Shared.IFunctionInput`1<valuetype [CM.Shared]CM.Shared.Digital>>::.ctor(object,  native int)
    IL_0015: newobj instance void class CM.Server.DynamicCollection`1<class [CM.Shared]CM.Shared.IFunctionInput`1<valuetype [CM.Shared]CM.Shared.Digital>>::.ctor(class [mscorlib]System.Func`2<string, !0>)
    IL_001a: stfld class [CM.Shared]CM.Shared.IDynamicCollection`1<class [CM.Shared]CM.Shared.IFunctionInput`1<valuetype [CM.Shared]CM.Shared.Digital>> CM.Server.LogicalAndFunctionServer::'<Inputs>k__BackingField'
    IL_001f: ldarg.0

但是在这个IL的哪里可以找到FunctionInput类的实例。 我只能看到一些IFunctionInput类型,它是FunctionInput实现的接口,但是此代码如何知道要实例化的实类型? 有人有主意吗?

1 个答案:

答案 0 :(得分:0)

好的,我自己解决了。尚未考虑到lambda正在捕获“此”,因此它为其创建了一个关闭类。 Telerik的“ Just Decompile”没有显示Closure类,但我已经在ildasm中看到它。