Creating New Type Dynamically On Runtime

by Bar Zohan 15. February 2011 23:37

 

               AssemblyName assemblyName = new AssemblyName();

               assemblyName.Name = "newAssemblyname";

               AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);

               ModuleBuilder module = assemblyBuilder.DefineDynamicModule("tmpModule");

 

                TypeBuilder typeBuilder = module.DefineType("NewDynamicType", TypeAttributes.Public | TypeAttributes.Class);

 

                string propertyName = "propName";

 

                FieldBuilder field = typeBuilder.DefineField("_" + propertyName, typeof(int), FieldAttributes.Private);

 

                PropertyBuilder property = typeBuilder.DefineProperty(propertyName, PropertyAttributes.None, typeof(int), new Type[] { typeof(int) });

 

                MethodAttributes GetSetAttr = MethodAttributes.Public | MethodAttributes.HideBySig;

 

                MethodBuilder currGetPropMthdBldr = typeBuilder.DefineMethod("get_value", GetSetAttr, typeof(int), Type.EmptyTypes);

 

                ILGenerator currGetIL = currGetPropMthdBldr.GetILGenerator();

                currGetIL.Emit(OpCodes.Ldarg_0);

                currGetIL.Emit(OpCodes.Ldfld, field);

                currGetIL.Emit(OpCodes.Ret);

 

                MethodBuilder currSetPropMthdBldr = typeBuilder.DefineMethod("set_value", GetSetAttr, null, new Type[] { typeof(int) });

 

                ILGenerator currSetIL = currSetPropMthdBldr.GetILGenerator();

                currSetIL.Emit(OpCodes.Ldarg_0);

                currSetIL.Emit(OpCodes.Ldarg_1);

                currSetIL.Emit(OpCodes.Stfld, field);

                currSetIL.Emit(OpCodes.Ret);

 

                property.SetGetMethod(currGetPropMthdBldr);

                property.SetSetMethod(currSetPropMthdBldr);

 

 

               Type type = typeBuilder.CreateType();

 

 

               Object newInstance = Activator.CreateInstance(type);

We created a new type which has a property named `propName` and created an instance called newInstance from that type.

Tags: , , , , ,

.Net Framework | C# | OOP | Design Patterns

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

About the author

Page List