繁体   English   中英

IL的泛型?

[英]generics with IL?

是否可以在IL Generator中使用泛型?

        DynamicMethod method = new DynamicMethod(
            "GetStuff", typeof(int), new Type[] { typeof(object) });

        ILGenerator il = method.GetILGenerator();

        ... etc

是的,这是可能的,但不是DynamicMethod类。 如果你只能使用这门课,那你就不走运了。 如果您可以改为使用MethodBuilder对象,请继续阅读。

对于大多数意图和目的,发布泛型方法的主体与发出其他方法的主体没有区别,除了您可以创建泛型类型的局部变量。 下面是使用MethodBuilder创建泛型方法的示例,该方法使用泛型参数T并创建类型为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) }));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM