/// <summary> /// 成员信息 /// </summary> /// <param name="member">属性</param> /// <param name="filter">选择类型</param> private memberInfo(PropertyInfo member, memberFilter filter) : this((MemberInfo)member, filter) { MemberType = member.PropertyType; CanSet = member.CanWrite; CanGet = member.CanRead; }
/// <summary> /// 成员信息 /// </summary> /// <param name="type">成员类型</param> /// <param name="name">成员名称</param> /// <param name="index">成员编号</param> public memberInfo(memberType type, string name, int index) { MemberType = type; MemberName = name; MemberIndex = index; IsField = CanSet = CanSet = true; Filter = memberFilter.PublicInstance; }
/// <summary> /// 成员方法 /// </summary> /// <param name="method">成员方法信息</param> /// <param name="filter">选择类型</param> public methodInfo(MethodInfo method, memberFilter filter) : base(method, filter) { Method = method; ReturnType = Method.ReturnType; Parameters = parameterInfo.Get(method); OutputParameters = Parameters.getFindArray(value => value.Parameter.IsOut || value.Parameter.ParameterType.IsByRef); GenericParameters = method.GetGenericArguments().getArray(value => (memberType)value); }
/// <summary> /// 字段信息 /// </summary> /// <param name="field">字段信息</param> /// <param name="filter">选择类型</param> /// <param name="index">成员编号</param> public fieldInfo(FieldInfo field, memberFilter filter, int index) : base((MemberInfo)field, filter) { IsField = CanGet = true; CanSet = !field.IsInitOnly; MemberIndex = index; MemberType = field.FieldType; Getter = fieldGetValue.Creator.Create(field); Setter = fieldSetValue.Creator.Create(field); }
/// <summary> /// 成员信息 /// </summary> /// <param name="member">成员信息</param> /// <param name="filter">选择类型</param> protected memberInfo(MemberInfo member, memberFilter filter) { Member = member; MemberName = member.Name; Filter = filter; IsIgnore = member.customAttributes <ignore>(true).Any(value => value.IsIgnore); if (CanGet && CanSet) { sqlMember sqlMember = member.customAttribute <sqlMember>(true); if (sqlMember != null && sqlMember.SqlType != null) { MemberType = new memberType(MemberType, sqlMember.SqlType); } } }
/// <summary> /// 成员信息 /// </summary> /// <param name="member">字段</param> /// <param name="filter">选择类型</param> private memberInfo(FieldInfo member, memberFilter filter) : this((MemberInfo)member, filter) { IsField = CanGet = true; CanSet = !member.IsInitOnly; sqlMember sqlMember = member.customAttribute <sqlMember>(true); if (sqlMember == null || sqlMember.SqlType == null) { MemberType = member.FieldType; } else { MemberType = new memberType(member.FieldType, sqlMember.SqlType); } }
/// <summary> /// 属性信息 /// </summary> /// <param name="property">属性信息</param> /// <param name="filter">选择类型</param> /// <param name="index">成员编号</param> /// <param name="nonPublic">是否非公有属性</param> /// <param name="isStruct">目标类型是否结构体</param> public propertyInfo(PropertyInfo property, memberFilter filter, int index, bool nonPublic, bool isStruct) : base((MemberInfo)property, filter) { CanSet = property.CanWrite; CanGet = property.CanRead; MemberType = property.PropertyType; MemberIndex = index; if (isStruct) { getMethod = property.GetGetMethod(nonPublic); setMethod = property.GetSetMethod(nonPublic); } else { Getter = propertyGetter <valueType> .createPropertyTargetGetter.Default.Create(property, nonPublic); Setter = propertySetter <valueType> .createPropertyTargetSetter.Default.Create(property, nonPublic); Copyer = propertyCopyer <valueType> .Creator.Create(property, nonPublic); } }
/// <summary> /// 根据类型获取成员信息集合 /// </summary> /// <typeparam name="attributeType">自定义属性类型</typeparam> /// <param name="filter">选择类型</param> /// <param name="isAttribute">是否匹配自定义属性类型</param> /// <param name="isBaseType">是否搜索父类属性</param> /// <param name="isInheritAttribute">是否包含继承属性</param> /// <returns>成员信息集合</returns> public static memberInfo[] GetMembers <attributeType>(Type type, memberFilter filter, bool isAttribute, bool isBaseType, bool isInheritAttribute) where attributeType : fastCSharp.setup.ignore { return(getAttribute <attributeType>(GetMembers(type, filter), isAttribute, isBaseType, isInheritAttribute)); }
/// <summary> /// 根据类型获取成员信息集合 /// </summary> /// <param name="filter">选择类型</param> /// <returns>成员信息集合</returns> public static memberInfo[] GetMembers(Type type, memberFilter filter) { return(getMembers(type).getFindArray(value => (value.Filter & filter) != 0)); }
/// <summary> /// 获取匹配成员方法集合 /// </summary> /// <typeparam name="attributeType">自定义属性类型</typeparam> /// <param name="type">类型</param> /// <param name="filter">选择类型</param> /// <param name="isFilter">是否完全匹配选择类型</param> /// <param name="isAttribute">是否匹配自定义属性类型</param> /// <param name="isBaseType">是否搜索父类自定义属性</param> /// <param name="isInheritAttribute">自定义属性类型是否可继承</param> /// <returns>匹配成员方法集合</returns> public static methodInfo[] GetMethods <attributeType>(Type type, memberFilter filter, bool isFilter, bool isAttribute, bool isBaseType, bool isInheritAttribute) where attributeType : ignore { return(getMethods <attributeType>(type, GetMethods(type, filter, isFilter), isAttribute, isBaseType, isInheritAttribute)); }
/// <summary> /// 获取匹配成员方法集合 /// </summary> /// <param name="type">类型</param> /// <param name="filter">选择类型</param> /// <param name="isFilter">是否完全匹配选择类型</param> /// <returns>匹配的成员方法集合</returns> public static list <methodInfo> GetMethods(Type type, memberFilter filter, bool isFilter) { return(getMethods(type).getFind(value => isFilter ? (value.Filter & filter) == filter : ((value.Filter & filter) != 0))); }