sgt*_*gtz 5 .net c# il reflection.emit ilgenerator
是否可以在IL Generator中使用泛型?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
Run Code Online (Sandbox Code Playgroud)
是的,这是可能的,但不是与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]);
Run Code Online (Sandbox Code Playgroud)
要从另一个方法发出对该泛型方法的调用,请使用此代码.假设method是描述泛型方法定义的对象MethodInfo或MethodBuilder对象,可以使用单个泛型参数发出对该方法的调用,int如下所示:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |