【发布时间】:2016-12-27 06:01:44
【问题描述】:
我想创建带有反射发射的动态类型,例如:
public class ObservableTestColleciton<T> : ObservableCollection<T>
{
public T Parent { get; set; }
public ObservableTestColleciton(T parent)
{
Parent = parent;
}
public ObservableTestColleciton(T parent, IEnumerable<T> source):base(source)
{
Parent = parent;
}
}
我无法完成的代码是这样的:
AppDomain myDomain = AppDomain.CurrentDomain;
AssemblyName myAsmName = new AssemblyName("AAB");
AssemblyBuilder myAssembly = myDomain.DefineDynamicAssembly(myAsmName,AssemblyBuilderAccess.Save);
ModuleBuilder myModule = myAssembly.DefineDynamicModule(myAsmName.Name,myAsmName.Name + ".dll");
TypeBuilder myType = myModule.DefineType("ObservableTestCollection", TypeAttributes.Class | TypeAttributes.Public);
string[] typeParamNames = { "T" };
GenericTypeParameterBuilder[] typeParams = myType.DefineGenericParameters(typeParamNames);
Type observableOf = typeof(ObservableCollection<>);
Type genOb = observableOf.MakeGenericType(typeParams[0]);
FieldBuilder myField = myType.DefineField("Parent", typeParams[0], FieldAttributes.Public);
ConstructorBuilder constructor = myType.DefineConstructor(MethodAttributes.Public, CallingConventions.HasThis, Type.EmptyTypes);
var type = myType.CreateType();
var obj = Activator.CreateInstance(type);
myAssembly.Save("AAB.dll");
非常感谢您的帮助!
【问题讨论】:
标签: c# inheritance reflection collections typebuilder