zoukankan      html  css  js  c++  java
  • 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;
            }
  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    node 封装db层
    json结构更改的方法 把date有数据的分类
    webpack.config.js
    SQLSERVER 跨服 跨库
    sqlserver2005重新安装(安装汇编错误,安装程序无法连接到数据库服务进行服务配置)
    delete语句与reference约束 FK_subplan_job_id冲突问题,导致job无法删除解决办法
    删除作业计划出错(DELETE语句与 REFERENCE约束"FK_subplan_job_id"冲突。)
    jquery判断checked的三种方法
    SQLSERVER和sybase的差异
  • 原文地址:https://www.cnblogs.com/zhangtaotqy/p/9394596.html
Copyright © 2011-2022 走看看