[Name("Admin")]
public class TestAdmin : TestUserBase<TestAdmin>
{
public TestAdmin(Type webDriverType) : base(webDriverType)
{
}
}
目前,我有一堆这种形式的类,我想在运行时使用Reflection.Emit创建。但是,当我尝试添加父项时,我遇到了一个问题 - 因为TestAdmin类在运行时之前不存在,我不知道如何创建
TestUserBase<TestAdmin>
有什么想法吗?
答案 0 :(得分:7)
您可以使用SetParent设置父类型:
TypeBuilder tb = mb.DefineType("TestAdmin", TypeAttributes.Public);
tb.SetParent(typeof(TestUserBase<>).MakeGenericType(tb));
Type theType = tb.CreateType();
答案 1 :(得分:3)
行。我无法彻底测试,但我认为这是可能的。尝试这样的事情:
假设您的通用基类已经定义(即,您没有生成TestUserBase<T>
),您应该可以执行以下操作:
var emittedType = module.DefineType("TestAdmin", TypeAttributes.Public | TypeAttributes.Class);
var baseType = typeof(TestUserBase<>).MakeGenericType(type);
emittedType.SetParent(baseType);
当然,如果开始生成TestUserBase<T>
,您可以在动态类型MakeGenericType
上使用TestUserBase<T>
使用相同的逻辑。 SetParent
逻辑是相同的。