具有新实例的 C# Reflection Emit Func
C# Reflection Emit Func with new instance
我正在尝试通过反射发出以下代码:
this.Inputs = new DynamicCollection<IFunctionInput<Digital>>((string name) => new FunctionInput<Digital>(this, name));
DynamicCollection 的构造函数采用 func,如下所示:
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-class 的实例化。
我只能看到一些 IFunctionInput 类型,它们是由 FunctionInput 实现的接口,但是这段代码如何知道要实例化的真实类型?
有人有想法吗?
好的,我自己解决了。没想到lambda在捕获"this",所以给它创建了一个闭包-class。
Telerik 的 "Just Decompile" 没有显示 Closure-classes 但我在 ildasm 中看到过它。
我正在尝试通过反射发出以下代码:
this.Inputs = new DynamicCollection<IFunctionInput<Digital>>((string name) => new FunctionInput<Digital>(this, name));
DynamicCollection 的构造函数采用 func,如下所示:
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-class 的实例化。 我只能看到一些 IFunctionInput 类型,它们是由 FunctionInput 实现的接口,但是这段代码如何知道要实例化的真实类型? 有人有想法吗?
好的,我自己解决了。没想到lambda在捕获"this",所以给它创建了一个闭包-class。 Telerik 的 "Just Decompile" 没有显示 Closure-classes 但我在 ildasm 中看到过它。