特性Attibute定义和使用

Posted 我没有领悟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特性Attibute定义和使用相关的知识,希望对你有一定的参考价值。

1.定义特性

[AttributeUsage(AttributeTargets.Class,AllowMultiple = false,Inherited = false)]
    public class TableNameAttribute:Attribute
    {
        private string _tableName;
        public TableNameAttribute(string tableName)
        {
            _tableName = tableName;
        }

        public string TableName {
            get { return _tableName; }
        }
    }
 [AttributeUsage(AttributeTargets.Property|AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
    public class ColumnNameAttribute:Attribute
    {
        private string _columnName;
        public ColumnNameAttribute(string columnName)
        {
            _columnName = columnName;
        }

        public string ColumnName
        {
            get { return _columnName; }
        }
    }

2.在Model上使用特性

 [TableName("Category")]
    public  class Category:BaseEntity<long>
    {
        /// <summary>
        /// 类别名称
        /// </summary>
        [ColumnName("Name")]
        public string Name { get; set; }
        /// <summary>
        /// 类别编码
        /// </summary>
        [ColumnName("Code")]
        public string Code { get; set; }
        /// <summary>
        /// 父类别编码
        /// </summary>
        public string ParentCode { get; set; }
        /// <summary>
        /// 类别链接
        /// </summary>
        public string Url { get; set; }
        /// <summary>
        /// 类别层级
        /// </summary>
        public int CategoryLevel { get; set; }
        /// <summary>
        /// 状态
        /// </summary>
        public StateEnums State { get; set; }
    }

3.反射获取特性信息

 [TestMethod]
        public void AttributeTest()
        {
            Type type = typeof(Category);
            //获取类class上的特性
            var tableNameAttribute = (TableNameAttribute)type.GetCustomAttributes(typeof(TableNameAttribute), false).FirstOrDefault();
            if (tableNameAttribute != null)
            {
                string tableName = tableNameAttribute.TableName;
            }
            //获取属性Property上的特性
            foreach (var property in type.GetProperties())
            {
                var columnNameAttribute = (ColumnNameAttribute)property.GetCustomAttributes(typeof(ColumnNameAttribute), false).FirstOrDefault();
                if(columnNameAttribute != null)
                {
                    string columnName = columnNameAttribute.ColumnName;
                }              
            }
        }

 

以上是关于特性Attibute定义和使用的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis高级特性

代码片段如何使用CSS来快速定义多彩光标

SQL Prompt7.2下载及破解教程

如何在 Toad for Oracle 中使用自定义代码片段?

vs code 自定义代码片段

VSCode 配置 用户自定义代码片段 自定义自动代码补充