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.运行结果:


原文地址:https://www.cnblogs.com/zhangqs008/p/3059794.html