首页 > 其他分享 >特性Attribute的简单用法

特性Attribute的简单用法

时间:2022-11-19 14:56:05浏览次数:43  
标签:SensitiveFileTypeEnum set Attribute 特性 用法 public 属性

一、建立一个自定义的Attribute类

注:类名+Attribute,类需要继承Attribute

  

    /// <summary>
    /// 特性
    /// </summary>
    public class SensitiveFileTypeAttribute : Attribute
    {
        /// <summary>
        /// 字段类型
        /// </summary>
        public SensitiveFileTypeEnum FileType { get; set; }

        public SensitiveFileTypeAttribute(SensitiveFileTypeEnum fileType)
        {
            FileType = fileType;
        }

    }

    /// <summary>
    /// 字段类型枚举
    /// </summary>
    public enum SensitiveFileTypeEnum
    {

        /// <summary>
        /// 单价
        /// </summary>
        Price = 1,
        /// <summary>
        /// 金额
        /// </summary>
        Amount = 2,
        /// <summary>
        /// 折扣
        /// </summary>
        Discount = 3

    }

  二、简单在属性上面使用特性:

    属性上面标注特性:[特性名(特性值)]

public class SaleSoDtlDto
    {
        /// <summary>
        /// 数量
        /// </summary>
        public int Qty { get; set; }

        /// <summary>
        /// 折扣
        /// </summary>
        [SensitiveFileType(SensitiveFileTypeEnum.Discount)]
        public decimal Discount { get; set; }

    
        /// <summary>
        /// 未税本币结算价
        /// </summary>
        [SensitiveFileType(SensitiveFileTypeEnum.Price)]
        public decimal SettlementPrice { get; set; }
           

        /// <summary>
        /// 含税本币结算金额
        /// </summary>
        [SensitiveFileType(SensitiveFileTypeEnum.Amount)]
        public decimal TaxSettlementAmount { get; set; }
         

    }

  

三、获取某一个类上面有某特性的所有属性:

    /// <summary>
    /// 导出敏感字段
    /// </summary>
    public static class SensitiveFileAppService
    {
        /// <summary>
        /// 使用反射找出某一个类有标记某特性的属性
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public static List<PropertyInfo> GetSensitiveFileList<T>() where T : class, new()
        {
            List<PropertyInfo> proList = new List<PropertyInfo>();

            var properties = typeof(T).GetProperties();
            if (properties == null || !properties.Any()) return proList;

            foreach (PropertyInfo p in properties)
            {
                var name = p.Name;//属性名称

                var attribute = p.GetCustomAttribute<SensitiveFileTypeAttribute>();
                if (attribute == null) continue;  //当前属性是否有SensitiveFileTypeAttribute特性 为NULL就没有此属性

                var fileType = attribute.FileType;//特性的FileType属性值

                proList.Add(p);

            }

            return proList;

        }

    }

  

 public void TestWay()
        {

            var proList = SensitiveFileAppService.GetSensitiveFileList<SaleSoDtlDto>();
        }

  

标签:SensitiveFileTypeEnum,set,Attribute,特性,用法,public,属性
From: https://www.cnblogs.com/yaoxiaodan/p/16906122.html

相关文章

  • 面向对象编程三大特性------封装、继承、多态(概念理解,应用举例)
    1.面向对象&面向过程面向过程思想步骤清晰简单,第一步做什么,第二步做什么....面向过程适合处理一些简单的问题。面向对象思想物以类聚,在思考问题解决方案时会先......
  • 80:eval()函数用法
    ###eval()函数 功能:将字符串str当成有效的表达式来求值并返回计算结果。语法:eval(source[,globals[,locals]])->value参数:source:一个Python表达式或函数com......
  • dubbo3新特性
    https://blog.csdn.net/qq1309664161/article/details/125858917 dubbo扩展点加载采用SPI。serviceproviderinterfaceJavaSPI加载失败,可能会因为各种原因导致异常......
  • Javascript(笔记44) - ES7特性 - 指数操作符
    Array.prototype.includesincludes 方法用来检测数组中是否包含某个元素,返回布尔值;constmingzhu=['西游记','三国演义','红楼梦','水浒传'];console.log(mingzhu.includ......
  • java5至java17新特性总结(开发相关)
    目录​​一、JAVA5~11(图片版)​​​​二、JAVA12~17(文字版)​​​​开关表达式​​​​文本块​​​​打包工具​​​​Instanceof的模式匹配​​​​记录​​​​密封类​​......
  • java8 (jdk 1.8) 新特性——Lambda
    java8(jdk1.8)新特性——初步认识  1.什么是lambda?目前已知的是,有个箭头  ->  说一大段官方话,也没有任何意义我们直接看代码:之前我们创建线程是这样的......
  • Shell脚本的基础用法介绍
    Shell脚本介绍Shell一个命令行解释器,它的作用是将输入的命令加以解释并传给系统执行,是用户与系统沟通的桥梁,而Shell脚本是一种脚本语言,支持逻辑判断,循环执行......
  • Python 写入文件、读取文件内容——open函数/readLines/Write/find函数用法
    1、读取.txt整个文件ww.txt文件在程序文件所在的目录,在文件存储在其他地方,ww.txt需要添加文件路径,如:E:\book1\ww.txt;读取后希望返回的是列表类型,将read改为readlineswit......
  • Messagebox的简单用法
    实训后,让我对消息弹窗这一部分内容特别感兴趣,现在对弹窗消息做一点小小的总结:1、头文件#include<windows.h>,只能在windows环境下进行;2、MessageBox(NULL,"弹窗的消息内容",......
  • MySQL8.0新特性—InnoDB增强
    1.自增变量持久化在MySQL8.0之前的版本中,自增列计数器置于内存中,并不会持久化到磁盘,当数据库重启后,会根据selectmax(id)+1fromxxx重新计算当前自增列值,这种现象在某些......