带有IL的泛型



是否可以将泛型与IL生成器一起使用?

        DynamicMethod method = new DynamicMethod(
            "GetStuff", typeof(int), new Type[] { typeof(object) });
        ILGenerator il = method.GetILGenerator();
        ... etc

是的,这是可能的,但DynamicMethod类不行。如果你被限制使用这个类,那你就倒霉了。如果您可以使用MethodBuilder对象,请继续阅读。

出于大多数意图和目的,发出泛型方法的主体与发出其他方法的主体没有什么不同,只是可以生成泛型类型的局部变量。以下是使用具有泛型参数T的MethodBuilder创建泛型方法并创建类型为T的局部方法的示例:

MethodBuilder method;
//... Leaving out code to create MethodBuilder and store in method
var genericParameters = method.DefineGenericParameters(new[] { "T" });
var il = method.GetILGenerator();
LocalBuilder genericLocal = il.DeclareLocal(genericParameters[0]);

要从另一个方法发出对该泛型方法的调用,请使用以下代码。假设method是描述泛型方法定义的MethodInfoMethodBuilder对象,则可以使用单个泛型参数int发出对该方法的调用,如下所示:

il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));

相关内容

  • 没有找到相关文章

最新更新