使用TypeBuilder,我正在构建一个实现包含方法的接口的类。使用 实现该方法后ILGenerator,然后我调用TypeBuilder.CreateType(),在正常情况下一切顺利。但是,如果该方法包含带有in修饰符的任何参数(也称为值类型的只读引用)TypeBuilder.CreateType() ,则会抛出TypeLoadException("Method 'SomeMethod' ... does not have an implementation.")。
与通常情况下TypeLoadException所实现的方法与接口中声明的方法不存在相同的签名不同,只有当方法包含in参数(即使签名相同)时才会出现此问题。当我删除或更改in修饰符为refor时out,TypeBuilder.CreateType()成功地将生成的方法识别为接口中声明的方法的实现,并且类型正常构建。
这是一个完全可编译的示例:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Threading;
namespace EmitMethodWithInParamTest
{
public struct StructParam
{
public String Data;
}
public interface ISomeInterface
{
Int32 SomeMethod(in StructParam param);
}
static class EmitExtension
{
public static void ReplicateCustomAttributes(this ParameterBuilder paramBuilder, …Run Code Online (Sandbox Code Playgroud)