• C# 自定义特性


    1.代码视图:


    2.RecordAttribute.cs

    using System;
    
    namespace 自定义特性
    {
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
        public class RecordAttribute : Attribute
        {
            private readonly string _author; // 作者     
            private readonly DateTime _date; // 更新/创建 日期     
            private readonly string _recordType; // 记录类型:更新/创建     
    
            // 构造函数,构造函数的参数在特性中也称为“位置参数”。     
            //NOTE:注意构造函数的参数 date,必须为一个常量、Type类型、或者是常量数组,所以不能直接传递DateTime类型。
            public RecordAttribute(string recordType, string author, string date)
            {
                _recordType = recordType;
                _author = author;
                _date = Convert.ToDateTime(date);
            }
    
            // 对于位置参数,通常只提供get访问器     
            public string RecordType
            {
                get { return _recordType; }
            }
    
            public string Author
            {
                get { return _author; }
            }
    
            public DateTime Date
            {
                get { return _date; }
            }
    
            // 构建一个属性,在特性中也叫“命名参数”     
            public string Memo { get; set; }
        }
    }

    3.Program.cs

    using System;
    using System.Reflection;
    
    namespace 自定义特性
    { 
        internal class Program
        {
            private static void Main(string[] args)
            {
                var demo = new DemoClass();
                Console.WriteLine(demo.ToString());
    
                MemberInfo reflection = typeof(DemoClass);
                var recordAttributes =
                    Attribute.GetCustomAttributes(reflection, typeof(RecordAttribute)) as RecordAttribute[];
                if (recordAttributes != null)
                {
                    foreach (RecordAttribute attribute in recordAttributes)
                    {
                        if (attribute != null)
                        {
                            Console.WriteLine("时间:{0}", attribute.Date.ToString("yyyy-MM-dd HH:mm:ss"));
                            Console.WriteLine("作者:{0}", attribute.Author);
                            Console.WriteLine("备注:{0}", attribute.Memo);
                        }
                    }
                }
    
                Console.Read();
            }
        }
        [Record("更新", "王五", "2012-12-24", Memo = "修改 ToString()方法")]
        [Record("更新", "李四", "2012-12-18", Memo = "修改文件")]
        [Record("创建", "张三", "2012-11-15", Memo = "创建文件")]
        public class DemoClass
        {
            public override string ToString()
            {
                return "This is a demo class";
            }
        }
    }

    4.运行结果:


  • 相关阅读:
    java类型比较_Java数据类型的比较
    学习方法-1:海绵学习法
    性能测试:TPS和QPS的区别
    代码反思
    网站TLS升级 1.0&1.1--1.2
    Mysql常用语法
    初级测试工程师面试指南
    postman实战之断言
    postman预处理脚本实战
    什么是HTTP超文本协议
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/3059794.html
Copyright © 2020-2023  润新知