ILGenerator - 在动态类型中实现克隆方法

时间:2014-01-02 04:49:57

标签: c# reflection.emit il

我希望在动态类型中实现一个克隆方法,但问题是在我声明typeBuilder.CreateType()之前我不能说新的类型 - 我得到异常:System.NotSupportedException:被调用的成员在创建类型之前不支持。

有解决方法吗?

编辑: 这就是我用Emit复制的内容。克隆工作本身是在受保护的构造函数中完成的,并不是外部完成的,因为我需要复制私有成员。

public class SomeOperatorInstance : OperatorInstance, ISomeOperatorInstance
{
    public SomeOperatorInstance() { }

    internal SomeOperatorInstance(SomeOperatorInstance source) : base(source) { }

    public override IOperatorInstance Clone()
    {
        return new SomeOperatorInstance(this);
    }
}

1 个答案:

答案 0 :(得分:1)

问题是我试图使用反射来获取构造函数。我应该做的(以及有效的)是我为它设置了我为该类型设置的ConstructorBuilder。这允许我在实际创建类型之前使类型实例化。

简而言之:不要使用反射来获取构造函数;改为使用ConstructorBuilder。