在运行时创建类型“MyClass:OtherClass{}”?在C#中是否可以在运行时创建一个继承自泛型类的类型,其中基类的模板参数是当前正在构造的类?这将编译正常://我有这个类:publicclassOtherClasswhereT:OtherClass{}//我想在运行时创建这个:publicclassMyClass:OtherClass{}但我不知道如何使用System.Reflection。发射。ModuleBuilder.TypeBuilder创建MyClass:AssemblyNameasn=newAssemblyName("test.dll");AssemblyBuilderasb=AppDomain.CurrentDomain.DefineDynamicAssembly(asn,AssemblyBuilderAccess.RunAndSave,@"D:test_assemblies");ModuleBuilder=modbule=asb.Define(Dynamic"test","test.dll");TypeBuildertb=modb.DefineType("test",TypeAttributes.Public|TypeAttributes.Class,typeof(MyClass));//如何指定继承?//填充属性、字段、方法等,发出...tb.CreateType();这可能吗?编辑-根据目前的反应,我试过这个:publicclassOtherClasswhereT:OtherClass{}publicstaticvoidCreateSimple(){AssemblyNameasn=新的程序集名称(“测试”);AssemblyBuilderasb=AppDomain.CurrentDomain.DefineDynamicAssembly(asn,AssemblyBuilderAccess.RunAndSave,@"D:test_asms");ModuleBuildermodb=asb.DefineDynamicModule("test","test.dll");尝试{TypeBuildertb=modb.DefineType("MyClass",TypeAttributes.Public|TypeAttributes.Class);输入my=tb.CreateType();tb.SetParent(typeof(OtherClass).MakeGenericType(my));我的=tb.CreateType();}赶上(异常e){抛出;}}但得到这个例子外:GenericArguments[0],'MyClass',on'MyProject.Factory+OtherClass`1[T]'违反类型'T'的约束。编辑:这是我最后的工作答案:AssemblyNameasn=newAssemblyName("test.dll");AssemblyBuilderasb=AppDomain.CurrentDomain.DefineDynamicAssembly(asn,AssemblyBuilderAccess.RunAndSave,@"D:test_assemblies");ModuleBuildermodb=asb.DefineDynamicModule("test","test.dll");TypeBuildertb=modb.DefineType("test",TypeAttributes.Public|TypeAttributes.Class);//Typebuilder是输入tb.SetParent(typeof(OtherClass).MakeGenericType(tb));vart2=tb.CreateType();vari=Activator.CreateInstance(t2);诀窍是使用正在构造的参数化泛型类型调用SetParent类型的类型构建器使用TypeBuilder.SetParent(typeparent)方法。使用它时要小心,将异常抛出推迟到调用CreateType时:如果parent为null,则Object用作??基本类型。在.NETFramework1.0和1.1版本中,如果父级是接口类型,则不会引发异常,但在调用CreateType方法时会引发TypeLoadException。SetParent方法不检查大多数无效的父类型。例如,当当前类型有默认构造函数时,它不会拒绝没有默认构造函数的超类型,它不会拒绝密封类型,也不会拒绝委托类型。在所有这些情况下,CreateType方法都会引发异常。要构建通用类型OtherClass,请使用MakeGenericType方法:vargenericType=typeof(OtherClass).MakeGenericType(typeof(MyClass));您可以在之后设置基本类型。TypeBuilder.SetParent(Type)是的。这个有可能。请参阅Reflection.Emit命名空间和TypeBuilder的方法。以上就是C#学习教程:Createthetype"MyClass:OtherClass{}"atruntime?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
