1. 自定义attribute需要继承Attribute基类

    /// <summary>
    /// Datareader反射使用 标记
    /// 标记 属性在Datareader 中的字段名 以便反射赋值
    /// </summary>
    [AttributeUsage(AttributeTargets.Property| AttributeTargets.Field)]
   public class DataReaderModelAttribute:Attribute
    {
        private string datareaderfieldname;
        public string Datareaderfieldname {
            get {
                return this.datareaderfieldname;
            }
        }
        public DataReaderModelAttribute(string datareaderfielname) {
            this.datareaderfieldname = datareaderfielname;
        }

    }

2. 使用自定义特性

 public class ExportRecordModel
 {
        /// <summary>
        /// 日期
        /// </summary>
        [DataReaderModel("预约日期")]
        public string dateName { set; get; }

        /// <summary>
        /// 开始时间
        /// </summary>
        [DataReaderModel("开始时间")]
        public string startTime { set; get; }
 }

3. 利用反射,将拿到字段属性上的值

 ExportRecordModel exReModel = new ExportRecordModel();//新建一个使用了此特性的类
 Type type = exReModel.GetType();
 PropertyInfo[] p_list = type.GetProperties();//获取到此类的所有属性集合
 FieldInfo[] fieldInfos = type.GetFields();//获取到此类的所有字段集合
 if (p_list != null && p_list.Length > 0)
 {
     for (int i = 0; i < p_list.Length; i++)
     {
         Attribute datareaderattr = p_list[i].GetCustomAttribute(typeof(DataReaderModelAttribute), false);
         if (datareaderattr != null)
         {
             DataReaderModelAttribute dataattr = (DataReaderModelAttribute)datareaderattr;
             string attriName = dataattr.Datareaderfieldname;//获取到属性上使用的特性的参数值
         }
     }
 }

这只是attribute其中一个用法,我们可以利用这种用法,将两个字段值不同的类,但字段含义相同的值相互赋值。

12-16 14:41
查看更多