private PropertyToGenerate[] CollectProperties( ArrayList methodList, Type type, bool onlyVirtuals, ClassEmitter emitter) { ArrayList toGenerateList = new ArrayList(); BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; PropertyInfo[] properties = type.GetProperties(flags); foreach(PropertyInfo propInfo in properties) { bool generateReadable, generateWritable; generateWritable = generateReadable = false; MethodInfo setMethod, getMethod; setMethod = getMethod = null; if (propInfo.CanRead) { getMethod = propInfo.GetGetMethod(true); if (IsAccessible(getMethod) && AcceptMethod(getMethod, onlyVirtuals)) { methodList.Add(getMethod); generateReadable = true; } } if (propInfo.CanWrite) { setMethod = propInfo.GetSetMethod(true); if (IsAccessible(setMethod) && AcceptMethod(setMethod, onlyVirtuals)) { methodList.Add(setMethod); generateWritable = true; } } if (!generateWritable && !generateReadable) { continue; } PropertyAttributes atts = ObtainPropertyAttributes(propInfo); PropertyEmitter propEmitter = emitter.CreateProperty(propInfo.Name, atts, propInfo.PropertyType); PropertyToGenerate propToGenerate = new PropertyToGenerate(generateReadable, generateWritable, propEmitter, getMethod, setMethod); toGenerateList.Add(propToGenerate); } return (PropertyToGenerate[]) toGenerateList.ToArray(typeof(PropertyToGenerate)); }