`CreateDynamicType()` 方法是一个私有静态方法,用于创建一个动态实体类的 `TypeBuilder` 对象。以下是该方法的完整代码:
```
static TypeBuilder CreateDynamicType()
{
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public);
typeBuilder.DefineField("id", typeof(int), FieldAttributes.Private);
typeBuilder.DefineField("name", typeof(string), FieldAttributes.Private);
PropertyBuilder propertyBuilder1 = typeBuilder.DefineProperty("Id", PropertyAttributes.None, typeof(int), null);
MethodBuilder getterBuilder1 = typeBuilder.DefineMethod("get_Id", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof(int), Type.EmptyTypes);
ILGenerator ilGenerator1 = getterBuilder1.GetILGenerator();
ilGenerator1.Emit(OpCodes.Ldarg_0);
ilGenerator1.Emit(OpCodes.Ldfld, typeBuilder.GetField("id", BindingFlags.NonPublic | BindingFlags.Instance));
ilGenerator1.Emit(OpCodes.Ret);
propertyBuilder1.SetGetMethod(getterBuilder1);
PropertyBuilder propertyBuilder2 = typeBuilder.DefineProperty("Name", PropertyAttributes.None, typeof(string), null);
MethodBuilder getterBuilder2 = typeBuilder.DefineMethod("get_Name", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof(string), Type.EmptyTypes);
ILGenerator ilGenerator2 = getterBuilder2.GetILGenerator();
ilGenerator2.Emit(OpCodes.Ldarg_0);
ilGenerator2.Emit(OpCodes.Ldfld, typeBuilder.GetField("name", BindingFlags.NonPublic | BindingFlags.Instance));
ilGenerator2.Emit(OpCodes.Ret);
propertyBuilder2.SetGetMethod(getterBuilder2);
return typeBuilder;
}
```
该方法首先创建一个 `AssemblyName` 对象,然后使用 `DefineDynamicAssembly()` 方法创建一个动态程序集的 `AssemblyBuilder` 对象。接下来,使用 `DefineDynamicModule()` 方法创建一个动态模块的 `ModuleBuilder` 对象。然后,使用 `DefineType()` 方法创建一个动态实