protected PropertyBuilder DefineProperty(
            TypeBuilder typeBuilder,
            string name,
            Type type)
        {
            Type type1           = dCTypeStore.GetDCBuilderType("DCObject").Type;
            var  propertyBuilder = typeBuilder.DefineProperty(name, PropertyAttributes.HasDefault,
                                                              CallingConventions.HasThis, type, null, null, null, null,
                                                              null);
            var attributes =
                MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName;
            var mdBuilder1 = typeBuilder.DefineMethod("set_" + name, attributes, null, new Type[1]
            {
                type
            });
            var ilGenerator1 = mdBuilder1.GetILGenerator();

            ilGenerator1.Emit(OpCodes.Ldarg_0);
            ilGenerator1.Emit(OpCodes.Ldstr, name);
            ilGenerator1.Emit(OpCodes.Ldarg_1);
            ilGenerator1.Emit(OpCodes.Call,
                              type1.GetMethod("PropertySet", BindingFlags.Instance | BindingFlags.NonPublic));
            ilGenerator1.Emit(OpCodes.Ret);
            propertyBuilder.SetSetMethod(mdBuilder1);
            var mdBuilder2   = typeBuilder.DefineMethod("get_" + name, attributes, type, null);
            var ilGenerator2 = mdBuilder2.GetILGenerator();

            ilGenerator2.DeclareLocal(type);
            ilGenerator2.Emit(OpCodes.Ldarg_0);
            ilGenerator2.Emit(OpCodes.Ldstr, name);
            ilGenerator2.Emit(OpCodes.Call,
                              type1.GetMethod("PropertyGet", BindingFlags.Instance | BindingFlags.NonPublic));
            ilGenerator2.Emit(OpCodes.Castclass, type);
            ilGenerator2.Emit(OpCodes.Ret);
            propertyBuilder.SetGetMethod(mdBuilder2);
            return(propertyBuilder);
        }