[Name("Admin")]
public class TestAdmin : TestUserBase<TestAdmin>
{
public TestAdmin(Type webDriverType) : base(webDriverType)
{
}
}
Currently, I have a bunch of classes of this form that I'd like to create at runtime using Reflection.Emit. However, I'm running into an issue when I attempt to add the parent - since the TestAdmin class doesn't exist before runtime, I don't know how to create
TestUserBase<TestAdmin>
Any ideas?
You can set the parent type using SetParent :
TypeBuilder tb = mb.DefineType("TestAdmin", TypeAttributes.Public);
tb.SetParent(typeof(TestUserBase<>).MakeGenericType(tb));
Type theType = tb.CreateType();
OK. I haven't been able to test this thoroughly, but I think this is possible. Try something like this:
Assuming your generic base class is already defined (ie, you're not generating TestUserBase<T>
), you should be able to do something like this:
var emittedType = module.DefineType("TestAdmin", TypeAttributes.Public | TypeAttributes.Class);
var baseType = typeof(TestUserBase<>).MakeGenericType(type);
emittedType.SetParent(baseType);
Of course, if TestUserBase<T>
is begin generated, you can use this same logic using MakeGenericType
on the dynamic type TestUserBase<T>
. The SetParent
logic is the same.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.