Ejemplo n.º 1
0
        private static FieldBuilder[] GenerateProperties(TypeBuilder tb, DynamicProperty[] properties)
        {
            var fields = new FieldBuilder[properties.Length];

            for (int i = 0; i < properties.Length; i++)
            {
                DynamicProperty dp    = properties[i];
                FieldBuilder    fb    = tb.DefineField("_" + dp.Name, dp.Type, FieldAttributes.Private);
                PropertyBuilder pb    = tb.DefineProperty(dp.Name, PropertyAttributes.HasDefault, dp.Type, null);
                MethodBuilder   mbGet = tb.DefineMethod("get_" + dp.Name,
                                                        MethodAttributes.Public | MethodAttributes.SpecialName |
                                                        MethodAttributes.HideBySig,
                                                        dp.Type, Type.EmptyTypes);
                ILGenerator genGet = mbGet.GetILGenerator();
                genGet.Emit(OpCodes.Ldarg_0);
                genGet.Emit(OpCodes.Ldfld, fb);
                genGet.Emit(OpCodes.Ret);
                MethodBuilder mbSet = tb.DefineMethod("set_" + dp.Name,
                                                      MethodAttributes.Public | MethodAttributes.SpecialName |
                                                      MethodAttributes.HideBySig,
                                                      null, new[] { dp.Type });
                ILGenerator genSet = mbSet.GetILGenerator();
                genSet.Emit(OpCodes.Ldarg_0);
                genSet.Emit(OpCodes.Ldarg_1);
                genSet.Emit(OpCodes.Stfld, fb);
                genSet.Emit(OpCodes.Ret);
                pb.SetGetMethod(mbGet);
                pb.SetSetMethod(mbSet);
                fields[i] = fb;
            }
            return(fields);
        }
 private Type CreateDynamicClass(DynamicProperty[] properties)
 {
     LockCookie cookie = _rwLock.UpgradeToWriterLock(Timeout.Infinite);
     try
     {
         string typeName = "DynamicClass" + (_classCount + 1);
     #if ENABLE_LINQ_PARTIAL_TRUST
         new ReflectionPermission(PermissionState.Unrestricted).Assert();
     #endif
         try
         {
             TypeBuilder tb = _module.DefineType(typeName, TypeAttributes.Class |
                                                           TypeAttributes.Public, typeof (DynamicClass));
             FieldInfo[] fields = GenerateProperties(tb, properties);
             GenerateEquals(tb, fields);
             GenerateGetHashCode(tb, fields);
             Type result = tb.CreateType();
             _classCount++;
             return result;
         }
         finally
         {
     #if ENABLE_LINQ_PARTIAL_TRUST
             PermissionSet.RevertAssert();
     #endif
         }
     }
     finally
     {
         _rwLock.DowngradeFromWriterLock(ref cookie);
     }
 }
Ejemplo n.º 3
0
 private FieldInfo[] GenerateProperties(TypeBuilder tb, DynamicProperty[] properties)
 {
     FieldInfo[] array = new FieldBuilder[properties.Length];
     for (int i = 0; i < properties.Length; i++)
     {
         DynamicProperty dynamicProperty = properties[i];
         FieldBuilder    fieldBuilder    = tb.DefineField("_" + dynamicProperty.Name, dynamicProperty.Type, FieldAttributes.Private);
         PropertyBuilder propertyBuilder = tb.DefineProperty(dynamicProperty.Name, PropertyAttributes.HasDefault, dynamicProperty.Type, null);
         MethodBuilder   methodBuilder   = tb.DefineMethod("get_" + dynamicProperty.Name, MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.SpecialName, dynamicProperty.Type, Type.EmptyTypes);
         ILGenerator     iLGenerator     = methodBuilder.GetILGenerator();
         iLGenerator.Emit(OpCodes.Ldarg_0);
         iLGenerator.Emit(OpCodes.Ldfld, fieldBuilder);
         iLGenerator.Emit(OpCodes.Ret);
         MethodBuilder methodBuilder2 = tb.DefineMethod("set_" + dynamicProperty.Name, MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.SpecialName, null, new Type[]
         {
             dynamicProperty.Type
         });
         ILGenerator iLGenerator2 = methodBuilder2.GetILGenerator();
         iLGenerator2.Emit(OpCodes.Ldarg_0);
         iLGenerator2.Emit(OpCodes.Ldarg_1);
         iLGenerator2.Emit(OpCodes.Stfld, fieldBuilder);
         iLGenerator2.Emit(OpCodes.Ret);
         propertyBuilder.SetGetMethod(methodBuilder);
         propertyBuilder.SetSetMethod(methodBuilder2);
         array[i] = fieldBuilder;
     }
     return(array);
 }
Ejemplo n.º 4
0
 private FieldInfo[] GenerateProperties(TypeBuilder tb, DynamicProperty[] properties)
 {
     FieldInfo[] infoArray = new FieldBuilder[properties.Length];
     for (int i = 0; i < properties.Length; i++)
     {
         DynamicProperty property    = properties[i];
         FieldBuilder    field       = tb.DefineField("_" + property.Name, property.Type, FieldAttributes.Private);
         PropertyBuilder builder2    = tb.DefineProperty(property.Name, PropertyAttributes.HasDefault, property.Type, null);
         MethodBuilder   mdBuilder   = tb.DefineMethod("get_" + property.Name, MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.Public, property.Type, Type.EmptyTypes);
         ILGenerator     iLGenerator = mdBuilder.GetILGenerator();
         iLGenerator.Emit(OpCodes.Ldarg_0);
         iLGenerator.Emit(OpCodes.Ldfld, field);
         iLGenerator.Emit(OpCodes.Ret);
         MethodBuilder builder4   = tb.DefineMethod("set_" + property.Name, MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.Public, null, new Type[] { property.Type });
         ILGenerator   generator2 = builder4.GetILGenerator();
         generator2.Emit(OpCodes.Ldarg_0);
         generator2.Emit(OpCodes.Ldarg_1);
         generator2.Emit(OpCodes.Stfld, field);
         generator2.Emit(OpCodes.Ret);
         builder2.SetGetMethod(mdBuilder);
         builder2.SetSetMethod(builder4);
         infoArray[i] = field;
     }
     return(infoArray);
 }
Ejemplo n.º 5
0
 private FieldInfo[] GenerateProperties(TypeBuilder tb, DynamicProperty[] properties)
 {
     FieldInfo[] fieldInfoArray = (FieldInfo[])new FieldBuilder[properties.Length];
     for (int index = 0; index < properties.Length; ++index)
     {
         DynamicProperty property        = properties[index];
         FieldBuilder    fieldBuilder    = tb.DefineField("_" + property.Name, property.Type, FieldAttributes.Private);
         PropertyBuilder propertyBuilder = tb.DefineProperty(property.Name, PropertyAttributes.HasDefault, property.Type, (Type[])null);
         MethodBuilder   mdBuilder1      = tb.DefineMethod("get_" + property.Name, MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName, property.Type, Type.EmptyTypes);
         ILGenerator     ilGenerator1    = mdBuilder1.GetILGenerator();
         ilGenerator1.Emit(OpCodes.Ldarg_0);
         ilGenerator1.Emit(OpCodes.Ldfld, (FieldInfo)fieldBuilder);
         ilGenerator1.Emit(OpCodes.Ret);
         MethodBuilder mdBuilder2 = tb.DefineMethod("set_" + property.Name, MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName, (Type)null, new Type[1]
         {
             property.Type
         });
         ILGenerator ilGenerator2 = mdBuilder2.GetILGenerator();
         ilGenerator2.Emit(OpCodes.Ldarg_0);
         ilGenerator2.Emit(OpCodes.Ldarg_1);
         ilGenerator2.Emit(OpCodes.Stfld, (FieldInfo)fieldBuilder);
         ilGenerator2.Emit(OpCodes.Ret);
         propertyBuilder.SetGetMethod(mdBuilder1);
         propertyBuilder.SetSetMethod(mdBuilder2);
         fieldInfoArray[index] = (FieldInfo)fieldBuilder;
     }
     return(fieldInfoArray);
 }
 private FieldInfo[] GenerateProperties(TypeBuilder tb, DynamicProperty[] properties)
 {
     FieldInfo[] fields = new FieldBuilder[properties.Length];
     for (int i = 0; i < properties.Length; i++)
     {
         DynamicProperty dp = properties[i];
         FieldBuilder fb = tb.DefineField("_" + dp.Name, dp.Type, FieldAttributes.Private);
         PropertyBuilder pb = tb.DefineProperty(dp.Name, PropertyAttributes.HasDefault, dp.Type, null);
         MethodBuilder mbGet = tb.DefineMethod("get_" + dp.Name,
                                               MethodAttributes.Public | MethodAttributes.SpecialName |
                                               MethodAttributes.HideBySig,
                                               dp.Type, Type.EmptyTypes);
         ILGenerator genGet = mbGet.GetILGenerator();
         genGet.Emit(OpCodes.Ldarg_0);
         genGet.Emit(OpCodes.Ldfld, fb);
         genGet.Emit(OpCodes.Ret);
         MethodBuilder mbSet = tb.DefineMethod("set_" + dp.Name,
                                               MethodAttributes.Public | MethodAttributes.SpecialName |
                                               MethodAttributes.HideBySig,
                                               null, new[] {dp.Type});
         ILGenerator genSet = mbSet.GetILGenerator();
         genSet.Emit(OpCodes.Ldarg_0);
         genSet.Emit(OpCodes.Ldarg_1);
         genSet.Emit(OpCodes.Stfld, fb);
         genSet.Emit(OpCodes.Ret);
         pb.SetGetMethod(mbGet);
         pb.SetSetMethod(mbSet);
         fields[i] = fb;
     }
     return fields;
 }