他のポスターで言及されているようにテンプレートや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);