AssemblyName assemblyName = new AssemblyName("MyAssembly"); AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule"); TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public); MethodBuilder methodBuilder = typeBuilder.DefineMethod("MyMethod", MethodAttributes.Public, typeof(void), new Type[] { }); ILGenerator ilGenerator = methodBuilder.GetILGenerator(); ilGenerator.EmitWriteLine("Hello, world!"); ilGenerator.Emit(OpCodes.Ret); Type newType = typeBuilder.CreateType(); object instance = Activator.CreateInstance(newType); MethodInfo methodInfo = newType.GetMethod("MyMethod"); methodInfo.Invoke(instance, null);
AssemblyName assemblyName = new AssemblyName("MyAssembly"); AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule"); TypeBuilder typeBuilder = moduleBuilder.DefineType("IMyInterface", TypeAttributes.Public | TypeAttributes.Interface); for (int i = 0; i < 10; i++) { MethodBuilder methodBuilder = typeBuilder.DefineMethod($"Method{i}", MethodAttributes.Public | MethodAttributes.Abstract | MethodAttributes.Virtual, typeof(void), new Type[] { }); } Type newType = typeBuilder.CreateType();In this example, a new interface called "IMyInterface" is defined, with 10 abstract methods called "Method0" through "Method9". The new type is then created. The System.Reflection.Emit namespace is part of the .NET Framework Class Library.