7
[Name("Admin")]
public class TestAdmin : TestUserBase<TestAdmin>
{
    public TestAdmin(Type webDriverType) : base(webDriverType)
    {
    }
}

目前,我有一堆这种形式的类,我想在运行时使用 Reflection.Emit 创建它们。但是,当我尝试添加父级时遇到了一个问题 - 因为 TestAdmin 类在运行时之前不存在,我不知道如何创建

TestUserBase<TestAdmin>

有任何想法吗?

4

2 回答 2

7

您可以使用SetParent设置父类型:

TypeBuilder tb = mb.DefineType("TestAdmin", TypeAttributes.Public);
tb.SetParent(typeof(TestUserBase<>).MakeGenericType(tb));

Type theType = tb.CreateType();
于 2013-06-10T21:49:51.833 回答
3

好的。我无法彻底测试这一点,但我认为这是可能的。尝试这样的事情:

假设您的通用基类已经定义(即,您没有生成TestUserBase<T>),您应该能够执行以下操作:

var emittedType = module.DefineType("TestAdmin", TypeAttributes.Public | TypeAttributes.Class);
var baseType = typeof(TestUserBase<>).MakeGenericType(type);
emittedType.SetParent(baseType);

当然,如果是 begin 生成,您可以在动态类型上TestUserBase<T>使用相同的逻辑。逻辑是一样的。MakeGenericTypeTestUserBase<T>SetParent

于 2013-06-10T21:50:07.117 回答