zoukankan      html  css  js  c++  java
  • 自定属性的描叙信息类

      [PropertyDescription("物料编号", ProperVlaue = "MATERIAL_ID", DefaultValue = "MaterialId")]
            public int MATERIAL_ID { get; set; }
    
    用来自定义属性的描叙信息,该属性信息可以通过反射获取,自定义的类如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using System.Collections;
    
    
    namespace SKY.DEFINITION
    {
    
         /// <summary>  
        /// 范小军
        /// </summary>
        public enum EnumDBFieldUsage
        {
            /// <summary>
            /// 未定义。
            /// </summary>
            None = 0x00,
            /// <summary>
            /// 用于主键。
            /// </summary>
            PrimaryKey = 0x01,
            /// <summary>
            /// 用于唯一键。
            /// </summary>
            UniqueKey = 0x02,
            /// <summary>
            /// 由系统控制该字段的值。
            /// </summary>
            BySystem = 0x04
        }
        /// <summary>
        /// 用来获取属性描述信息的类
        /// 范小军
        /// 2012-01-05
        /// </summary>
        [AttributeUsage(AttributeTargets.Property, Inherited = true)]
        public class PropertyDescriptionAttribute : Attribute
        {
    
            EnumDBFieldUsage m_usage;
            string m_strFieldName;
            string m_strDescription;
            string m_strProperName;
            object m_defaultValue;
    
            public PropertyDescriptionAttribute(string strFieldName, object defaultValue, EnumDBFieldUsage usage, string strDescription)
            {
                m_strFieldName = strFieldName;
                m_defaultValue = defaultValue;
                m_usage = usage;
                m_strDescription = strDescription;
            }
    
            public PropertyDescriptionAttribute(string strFieldName,string strProperName, object defaultValue, EnumDBFieldUsage usage, string strDescription)
            {
                m_strFieldName = strFieldName;
                m_strProperName = strProperName;
                m_defaultValue = defaultValue;
                m_usage = usage;
                m_strDescription = strDescription;
            }
    
            public PropertyDescriptionAttribute(string fieldName)
                : this(fieldName, null, EnumDBFieldUsage.None, null)
            { }
    
            public PropertyDescriptionAttribute(string fieldName, EnumDBFieldUsage usage)
                : this(fieldName, null, usage, null)
            { }
    
    
            // 获取该成员映射的数据库字段名称。
            public string FieldName
            {
                get
                {
                    return m_strFieldName;
                }
                set
                {
                    m_strFieldName = value;
                }
            }
    
            // 获取该字段的默认值
            public object DefaultValue
            {
                get
                {
                    return m_defaultValue;
                }
                set
                {
                    m_defaultValue = value;
                }
            }
    
            // 获取该字段的默认值
            public string  ProperVlaue
            {
                get
                {
                    return m_strProperName;
                }
                set
                {
                    m_strProperName = value;
                }
            }
        }
    }
    

    使用方法如下:

      [PropertyDescription("物料编号", ProperVlaue = "MATERIAL_ID", DefaultValue = "MaterialId")]
            public int MATERIAL_ID { get; set; }
    

     可以通过前一章的反射类,获取相应的信息,方法如下:

          /// <summary>
            /// 获取一个属性的类型
            /// </summary>
            /// <param name="NameSpacestr"></param>
            /// <param name="obj"></param>
            /// <param name="PropertyName"></param>
            /// <returns></returns>
            public string getPropertyType(string NameSpacestr, string PropertyName)
            {
    
                Type t = Type.GetType(NameSpacestr);
                string tempvalue = "";  
                foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Instance | BindingFlags.Public))
                {
                    List<string> lpropername = new List<string>();
                    List<string> ldefault = new List<string>();
                    string temp = "";
                    object[] attrs = pi.GetCustomAttributes(typeof(PropertyDescriptionAttribute), true);
                    if (attrs.Length == 1)
                    {
                        PropertyDescriptionAttribute attr = (PropertyDescriptionAttribute)attrs[0];
                        lpropername.Add(attr.ProperVlaue);
                        ldefault.Add(attr.DefaultValue.ToString());    
                    }
                    
                    for (int i = 0; i < lpropername.Count; i++) {
                        if (ldefault[i].Equals(PropertyName))
                        {
                        temp = lpropername[i];
                    }
                    
                    }
                    if (pi.Name.Equals(temp))
                    {
                        tempvalue = pi.PropertyType.Name.ToString();
                        break;
                    }
    
                }
                return tempvalue;
    
            }
    

     可以获取响应的信息。

  • 相关阅读:
    lightoj 1094 Farthest Nodes in a Tree 【树的直径 裸题】
    nyoj 1185 最大最小值【线段树最大值最小值维护】
    nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】
    poj 3468 A Simple Problem with Integers【线段树区间修改】
    hdoj 1698 Just a Hook【线段树区间修改】
    hdoj 1556 Color the ball【线段树区间更新】
    hdoj 1286 找新朋友【欧拉函数】
    [LC] 303. Range Sum Query
    [LC] 79. Word Search
    [LC] 211. Add and Search Word
  • 原文地址:https://www.cnblogs.com/fanxiaojun/p/2385693.html
Copyright © 2011-2022 走看看