private static void GetChildPrivateProperties(IList <PropertyInfo> initialProperties, Type targetType, BindingFlags bindingAttr) { if ((bindingAttr & BindingFlags.NonPublic) == BindingFlags.Default) { return; } BindingFlags bindingAttr1 = RemoveFlag(bindingAttr, BindingFlags.Public); while ((targetType = TypeExtensions.BaseType(targetType)) != null) { foreach (PropertyInfo propertyInfo in targetType.GetProperties(bindingAttr1)) { PropertyInfo nonPublicProperty = propertyInfo; int index = CollectionUtils.IndexOf(initialProperties, p => p.Name == nonPublicProperty.Name); if (index == -1) { initialProperties.Add(nonPublicProperty); } else { initialProperties[index] = nonPublicProperty; } } } }
private static void GetChildPrivateFields(IList <MemberInfo> initialFields, Type targetType, BindingFlags bindingAttr) { if ((bindingAttr & BindingFlags.NonPublic) == BindingFlags.Default) { return; } BindingFlags bindingAttr1 = RemoveFlag(bindingAttr, BindingFlags.Public); while ((targetType = TypeExtensions.BaseType(targetType)) != null) { IEnumerable <MemberInfo> collection = Enumerable.Where(targetType.GetFields(bindingAttr1), f => f.IsPrivate); CollectionUtils.AddRange(initialFields, collection); } }
private static bool InheritsGenericDefinitionInternal(Type currentType, Type genericClassDefinition, out Type implementingType) { if (TypeExtensions.IsGenericType(currentType)) { Type genericTypeDefinition = currentType.GetGenericTypeDefinition(); if (genericClassDefinition == genericTypeDefinition) { implementingType = currentType; return(true); } } if (!(TypeExtensions.BaseType(currentType) == null)) { return(InheritsGenericDefinitionInternal(TypeExtensions.BaseType(currentType), genericClassDefinition, out implementingType)); } implementingType = null; return(false); }