using System; using System.Reflection; using System.Reflection.Emit; class Program { static void Main(string[] args) { // Create a dynamic assembly AssemblyName assemblyName = new AssemblyName("DynamicAssembly"); AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave); // Create a dynamic module ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule"); // Create a dynamic type TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public); // Create a dynamic method in the type MethodBuilder methodBuilder = typeBuilder.DefineMethod("Add", MethodAttributes.Public | MethodAttributes.Static, typeof(int), new Type[] { typeof(int), typeof(int) }); ILGenerator ilGenerator = methodBuilder.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Add); ilGenerator.Emit(OpCodes.Ret); // Create the type Type dynamicType = typeBuilder.CreateType(); // Get the dynamic method MethodInfo dynamicMethod = dynamicType.GetMethod("Add"); // Call the dynamic method int result = (int)dynamicMethod.Invoke(null, new object[] { 2, 3 }); Console.WriteLine(result); // Save the assembly assemblyBuilder.Save("DynamicAssembly.dll"); } }
using System; using System.Reflection; using System.Reflection.Emit; class Program { static void Main(string[] args) { // Create a dynamic assembly AssemblyName assemblyName = new AssemblyName("DynamicAssembly"); AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave); // Create a dynamic module ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule"); // Create a dynamic type TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public); // Create a dynamic method in the type MethodBuilder methodBuilder = typeBuilder.DefineMethod("StringLength", MethodAttributes.Public | MethodAttributes.Static, typeof(int), new Type[] { typeof(string) }); ILGenerator ilGenerator = methodBuilder.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Callvirt, typeof(string).GetMethod("get_Length")); ilGenerator.Emit(OpCodes.Ret); // Create the type Type dynamicType = typeBuilder.CreateType(); // Get the dynamic method MethodInfo dynamicMethod = dynamicType.GetMethod("StringLength"); // Call the dynamic method int result = (int)dynamicMethod.Invoke(null, new object[] { "Hello, world!" }); Console.WriteLine(result); // Save the assembly assemblyBuilder.Save("DynamicAssembly.dll"); } }Both examples demonstrate how to use the MethodBuilder class to create dynamic methods at runtime. The first example creates a dynamic method that adds two integer values, while the second example creates a dynamic method that returns the length of a string. These examples use the System.Reflection.Emit namespace, which is part of the .NET Framework Class Library package.