Esempio n. 1
0
 /// <summary>
 /// 字段信息
 /// </summary>
 /// <param name="field">字段信息</param>
 /// <param name="filter">选择类型</param>
 /// <param name="index">成员编号</param>
 public fieldIndex(FieldInfo field, memberFilters filter, int index)
     : base(field, filter, index)
 {
     IsField = CanGet = true;
     CanSet  = !field.IsInitOnly;
     Type    = field.FieldType;
 }
Esempio n. 2
0
 /// <summary>
 /// 属性信息
 /// </summary>
 /// <param name="property">属性信息</param>
 /// <param name="filter">选择类型</param>
 /// <param name="index">成员编号</param>
 public propertyIndex(PropertyInfo property, memberFilters filter, int index)
     : base(property, filter, index)
 {
     CanSet = property.CanWrite;
     CanGet = property.CanRead;
     Type   = property.PropertyType;
 }
Esempio n. 3
0
 /// <summary>
 /// 成员方法
 /// </summary>
 /// <param name="method">成员方法信息</param>
 /// <param name="filter">选择类型</param>
 internal methodInfo(MethodInfo method, memberFilters filter)
     : base(method, filter)
 {
     Method     = method;
     ReturnType = method.ReturnType;
     Type[] genericParameters = method.GetGenericArguments();
     Parameters        = parameterInfo.Get(method, genericParameters);
     OutputParameters  = Parameters.getFindArray(value => value.Parameter.IsOut || value.Parameter.ParameterType.IsByRef);
     GenericParameters = genericParameters.getArray(value => (memberType)value);
 }
Esempio n. 4
0
 /// <summary>
 /// 成员信息
 /// </summary>
 /// <param name="member">成员信息</param>
 protected memberIndex(memberIndex member)
 {
     Member      = member.Member;
     Type        = member.Type;
     MemberIndex = member.MemberIndex;
     Filter      = member.Filter;
     IsField     = member.IsField;
     CanSet      = member.CanSet;
     CanGet      = member.CanGet;
     isIgnore    = member.isIgnore;
 }
Esempio n. 5
0
        /// <summary>
        /// 获取字段成员集合
        /// </summary>
        /// <typeparam name="valueType"></typeparam>
        /// <typeparam name="memberAttribute"></typeparam>
        /// <param name="memberFilter"></param>
        /// <param name="isAllMember"></param>
        /// <returns>字段成员集合</returns>
        internal static subArray <FieldInfo> GetFields <valueType, memberAttribute>(memberFilters memberFilter, bool isAllMember)
            where memberAttribute : ignoreMember
        {
            fieldIndex[] fieldIndexs = fastCSharp.code.memberIndexGroup <valueType> .GetFields(memberFilter);

            subArray <FieldInfo> fields = new subArray <FieldInfo>(fieldIndexs.Length);

            foreach (fieldIndex field in fieldIndexs)
            {
                Type type = field.Member.FieldType;
                if (!type.IsPointer && (!type.IsArray || type.GetArrayRank() == 1) && !field.IsIgnore)
                {
                    memberAttribute attribute = field.GetAttribute <memberAttribute>(true, true);
                    if (isAllMember ? (attribute == null || attribute.IsSetup) : (attribute != null && attribute.IsSetup))
                    {
                        fields.Add(field.Member);
                    }
                }
            }
            return(fields);
        }
Esempio n. 6
0
 public static subArray <methodInfo> GetMethods(Type type, memberFilters filter, bool isFilter)
 {
     return(getMethods(type).getFind(value => isFilter ? (value.Filter & filter) == filter : ((value.Filter & filter) != 0)));
 }
Esempio n. 7
0
 /// <summary>
 /// 获取字段成员集合
 /// </summary>
 /// <typeparam name="valueType"></typeparam>
 /// <param name="memberFilter"></param>
 /// <returns>字段成员集合</returns>
 internal static keyValue <FieldInfo, int>[] GetFieldIndexs <valueType>(memberFilters memberFilter)
 {
     return(fastCSharp.code.memberIndexGroup <valueType> .GetFields(memberFilter)
            .getArray(value => new keyValue <FieldInfo, int>(value.Member, value.MemberIndex)));
 }
Esempio n. 8
0
        /// <summary>
        /// 获取属性成员集合
        /// </summary>
        /// <typeparam name="valueType"></typeparam>
        /// <typeparam name="memberAttribute"></typeparam>
        /// <param name="memberFilter"></param>
        /// <param name="isAllMember"></param>
        /// <param name="isGet">是否必须可读</param>
        /// <param name="isSet">是否必须可写</param>
        /// <returns>属性成员集合</returns>
        internal static subArray <PropertyInfo> GetProperties <valueType, memberAttribute>(memberFilters memberFilter, bool isAllMember, bool isGet, bool isSet)
            where memberAttribute : ignoreMember
        {
            propertyIndex[] propertyIndexs = fastCSharp.code.memberIndexGroup <valueType> .GetProperties(memberFilter);

            subArray <PropertyInfo> properties = new subArray <PropertyInfo>(propertyIndexs.Length);

            foreach (propertyIndex property in propertyIndexs)
            {
                if ((!isGet || property.CanGet) && (!isSet || property.CanSet))
                {
                    Type type = property.Member.PropertyType;
                    if (!type.IsPointer && (!type.IsArray || type.GetArrayRank() == 1) && !property.IsIgnore)
                    {
                        memberAttribute attribute = property.GetAttribute <memberAttribute>(true, true);
                        if (isAllMember ? (attribute == null || attribute.IsSetup) : (attribute != null && attribute.IsSetup))
                        {
                            properties.Add(property.Member);
                        }
                    }
                }
            }
            return(properties);
        }
Esempio n. 9
0
 public static memberInfo[] GetMembers <attributeType>(Type type, memberFilters filter, bool isAttribute, bool isBaseType, bool isInheritAttribute)
     where attributeType : fastCSharp.code.ignoreMember
 {
     return(find <memberInfo, attributeType>(GetMembers(type, filter), isAttribute, isBaseType, isInheritAttribute));
 }
Esempio n. 10
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">指定是否搜索该成员的继承链以查找这些特性,参考System.Reflection.MemberInfo.GetCustomAttributes(bool inherit)。</param>
 /// <param name="isInheritAttribute">自定义属性类型是否可继承</param>
 /// <returns>匹配成员集合</returns>
 public static memberIndex[] GetStatic <attributeType>(Type type, memberFilters filter, bool isFilter, bool isAttribute, bool isBaseType, bool isInheritAttribute)
     where attributeType : fastCSharp.code.ignoreMember
 {
     return(getStatic(type).Find(filter, isFilter).getFindArray(value => isAttribute ? value.IsAttribute <attributeType>(isBaseType, isInheritAttribute) : !value.IsIgnoreAttribute <attributeType>(isBaseType, isInheritAttribute)));
 }
Esempio n. 11
0
 /// <summary>
 /// 获取字段成员集合
 /// </summary>
 /// <typeparam name="valueType"></typeparam>
 /// <typeparam name="memberAttribute"></typeparam>
 /// <param name="memberFilter"></param>
 /// <param name="isAllMember"></param>
 /// <returns>字段成员集合</returns>
 public static subArray <FieldInfo> GetFields <valueType, memberAttribute>(memberFilters memberFilter, bool isAllMember)
     where memberAttribute : ignoreMember
 {
     return((subArray <FieldInfo>)getFieldsMethod.MakeGenericMethod(typeof(valueType), typeof(memberAttribute)).Invoke(null, new object[] { memberFilter, isAllMember }));
 }
Esempio n. 12
0
 /// <summary>
 /// 成员信息
 /// </summary>
 /// <param name="index">成员编号</param>
 protected memberIndex(int index)
 {
     MemberIndex = index;
     IsField     = CanSet = CanSet = true;
     Filter      = memberFilters.PublicInstance;
 }
Esempio n. 13
0
 /// <summary>
 /// 成员信息
 /// </summary>
 /// <param name="member">成员信息</param>
 /// <param name="filter">选择类型</param>
 /// <param name="index">成员编号</param>
 protected memberIndex(MemberInfo member, memberFilters filter, int index)
 {
     Member      = member;
     MemberIndex = index;
     Filter      = filter;
 }
Esempio n. 14
0
 /// <summary>
 /// 成员信息
 /// </summary>
 /// <param name="method">成员方法信息</param>
 /// <param name="filter">选择类型</param>
 protected memberInfo(MethodInfo method, memberFilters filter)
     : base(method, filter, 0)
 {
     Member     = method;
     MemberName = method.Name;
 }
Esempio n. 15
0
 public static methodInfo[] GetMethods <attributeType>(Type type, memberFilters filter, bool isFilter, bool isAttribute, bool isBaseType, bool isInheritAttribute)
     where attributeType : ignoreMember
 {
     return(getMethods <attributeType>(type, GetMethods(type, filter, isFilter), isAttribute, isBaseType, isInheritAttribute));
 }
Esempio n. 16
0
 internal memberIndex[] Find(memberFilters filter, bool isFilter = false)
 {
     return(get(value => isFilter ? (value.Filter & filter) == filter : ((value.Filter & filter) != 0)));
 }
Esempio n. 17
0
 /// <summary>
 /// 获取属性成员集合
 /// </summary>
 /// <typeparam name="valueType"></typeparam>
 /// <typeparam name="memberAttribute"></typeparam>
 /// <param name="memberFilter"></param>
 /// <param name="isAllMember"></param>
 /// <param name="isGet">是否必须可读</param>
 /// <param name="isSet">是否必须可写</param>
 /// <returns>属性成员集合</returns>
 internal static subArray <PropertyInfo> GetProperties <valueType, memberAttribute>(memberFilters memberFilter, bool isAllMember, bool isGet, bool isSet)
     where memberAttribute : ignoreMember
 {
     return((subArray <PropertyInfo>)getPropertiesMethod.MakeGenericMethod(typeof(valueType), typeof(memberAttribute)).Invoke(null, new object[] { memberFilter, isAllMember, isGet, isSet }));
 }
Esempio n. 18
0
 /// <summary>
 /// 获取字段成员集合
 /// </summary>
 /// <typeparam name="valueType"></typeparam>
 /// <param name="memberFilter"></param>
 /// <returns>字段成员集合</returns>
 public static keyValue <FieldInfo, int>[] GetFieldIndexs <valueType>(memberFilters memberFilter)
 {
     return((keyValue <FieldInfo, int>[])getFieldIndexsMethod.MakeGenericMethod(typeof(valueType)).Invoke(null, new object[] { memberFilter }));
 }
Esempio n. 19
0
 public static memberInfo[] GetMembers(Type type, memberFilters filter)
 {
     return(getMembers(type).getFindArray(value => (value.Filter & filter) != 0));
 }