除了像其他海报提到的那样使用模板和/或 VS 插件之外,在技术上可以使用 Reflection.Emit 来做到这一点,尽管它会非常费力并且可能不是很高效。它可能归结为 IL 操作,并且必须创建一个函数来手动将 IL 从基类映射到新的动态类型。
如果您可以使用接口而不是抽象类,那可能会更容易一些。以下是一些示例代码,可让您以任何一种方式开始:
AssemblyName assemblyName = new AssemblyName("MyDynamicAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly
(assemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule
("MyDynamicAssembly", "MyDynamicAssembly.dll");
TypeBuilder typeBuilder = moduleBuilder.DefineType
("MyDynamicAssembly." + typeName, TypeAttributes.Public, typeof(object));
typeBuilder.AddInterfaceImplementation(typeof(IMyInterface));
typeBuilder.DefineDefaultConstructor(MethodAttributes.Public);