• C# 利用反射和特性 来做一些事情


    特性代码:

        [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
        public class TableAttribute : Attribute
        {
            private string _TableName;
            /// <summary>
            /// 映射的表名
            /// </summary>
            public string TableName
            {
                get { return _TableName; }
            }
            /// <summary>
            /// 定位函数映射表名;
            /// </summary>
            /// <param name="table"></param>
            public TableAttribute(string table)
            {
                _TableName = table;
            }
    
        }
     [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
        public class FieldAttribute : Attribute
        {
            private string _Fields;
            private string _Description;
            private bool _IsEnable;
    
            public string Fields
            {
                get { return _Fields; }
    
            }
            public bool IsEnable
            {
                get { return _IsEnable; }
    
            }
            public string  Description
            {
                get { return _Description; }
    
            }
            public FieldAttribute(string fields, string description, bool isEnable)
            {
                _Fields = fields;
                _Description = description;
                _IsEnable = isEnable;
            }
        }

    应用的模型类库

            [Key]
            //[Field("表字段名称", "字段的说明", 是否在列表显示(true/false))]
            [Field("ID", "用户标识",false)]
            public string ID { get; set; }
    
            [Field("LoginName", "登录名",true)]
            public string LoginName { get; set; }
    
            [Field("Password", "密码",false)]
            public string Password { get; set; }
    
            [Field("Name", "姓名",true)]
            public string Name { get; set; }

    调用的代码:

            public static List<Columns> GetField_AttributeStr<T>() where T : class
            {
                List<Columns> columns = new List<Columns>();
                Type t = GetPropertyType(typeof(T));
                PropertyInfo[] Prs = t.GetProperties();
                foreach (dynamic p in Prs)
                {
                    object[] Fields = p.GetCustomAttributes(false);
                    foreach (dynamic attrs in Fields)
                    {
                        if (attrs is FieldAttribute)
                        {
                            FieldAttribute column = attrs as FieldAttribute;
                            var model = new Columns();
                            model.field = column.Fields;
                            model.title = column.Description;
                            model.sortable = false;
                            if (model.title == "排序" || model.title == "创建时间" || model.title == "修改时间")
                            {
                                model.sortable = true;
                            }
                            switch (column.IsEnable)
                            {
                                case true:
                                    columns.Add(model);
                                    break;
                                default:
                                    break;
                            }
                        }
                    }
                }
                return columns;
            }
  • 相关阅读:
    C# 语音识别
    Android—监听器
    android-Activity
    Android小案例——简单图片浏览器
    针对Android 模拟器启动慢的问题
    emulator-arm.exe 已停止工作、 emulator-x86 已停止工作
    android模拟器启动没有拨号功能
    安装好android的adt以后重启eclipse,但是没有创建AVD的图标
    android环境搭建——工欲善其事,必先利其器 2
    SQL 中常见的系统存储过程
  • 原文地址:https://www.cnblogs.com/zhangtaotqy/p/9394596.html
Copyright © 2020-2023  润新知