IL的generics?
是否可以在IL Generator中使用generics?
DynamicMethod method = new DynamicMethod( "GetStuff", typeof(int), new Type[] { typeof(object) }); ILGenerator il = method.GetILGenerator(); ... etc
是的,这是可能的,但不是DynamicMethod
类。 如果你只能使用这门课,那你就不走运了。 如果您可以改为使用MethodBuilder
对象,请继续阅读。
对于大多数意图和目的,发布generics方法的主体与发出其他方法的主体没有什么不同,除了您可以创建generics类型的局部变量。 下面是使用MethodBuilder
创建generics方法的示例,其中包含generics参数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]);
要从另一个方法发出对该generics方法的调用,请使用此代码。 假设method
是一个描述generics方法定义的MethodInfo
或MethodBuilder
对象,您可以使用单个generics参数int
发出对该方法的调用,如下所示:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));