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


目录
相关文章
|
9月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
24天前
|
编译器 C# C++
C# 特性(Attribute)
C# 特性(Attribute)
19 0
|
3月前
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
78 7
C# 9.0 新特性解析
|
8月前
|
C# C++
C# 自定义时间进度条
本文作者通过参考leslie_xin的一篇文章,成功创建了一个自定义的WinForms控件——时间进度条,该控件带有时间刻度和多种可定制的属性,如颜色、时间间隔等。作者在控件中加入了开始和结束时间,以及自适应的时间刻度间隔。控件能根据设置显示时间标签,并提供了事件处理,如值改变时的触发。代码中包含了计算时间刻度、绘制刻度线和时间标签的逻辑。作者强调了避免循环调用事件、使用OnXXX()形式的事件处理函数以及注意自定义控件中的属性和事件设计。
176 7
|
5月前
|
编译器 C# Android开发
震惊!Uno Platform 与 C# 最新特性的完美融合,你不可不知的跨平台开发秘籍!
Uno Platform 是一个强大的跨平台应用开发框架,支持 Windows、macOS、iOS、Android 和 WebAssembly,采用 C# 和 XAML 进行编程。C# 作为其核心语言,持续推出新特性,如可空引用类型、异步流、记录类型和顶级语句等,极大地提升了开发效率。要在 Uno Platform 中使用最新 C# 特性,需确保开发环境支持相应版本,并正确配置编译器选项。通过示例展示了如何在 Uno Platform 中应用可空引用类型、异步流、记录类型及顶级语句等功能,帮助开发者更好地构建高效、优质的跨平台应用。
288 59
|
3月前
|
C# 开发者
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
60 2
|
4月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
56 1
|
6月前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
166 1
|
6月前
|
C# 索引
C#各大版本特性
C#各大版本特性
88 0
|
9月前
|
移动开发 JavaScript 安全
C# 实现微信自定义分享
C# 实现微信自定义分享