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其中一个用法,我们可以利用这种用法,将两个字段值不同的类,但字段含义相同的值相互赋值。
原文地址:https://www.cnblogs.com/wjtstudy/p/12166261.html
时间: 2024-10-09 11:44:31