自定义特性通过继承System.Attribute创建,使用AttributeUsage指定应用目标,如[AttributeUsage(AttributeTargets.Method)]public class LogActionAttribute : Attribute{ public string ActionName { get; set; } public LogActionAttribute(string actionName) { ActionName = actionName; }},然后可将[LogAction(“用户登录”, ActionName = “Authentication”)]应用于方法,并通过反射在运行时读取特性数据,实现声明式编程,常用于日志、权限、序列化等场景。

特性(Attribute)是 C# 中一种为代码元素添加元数据的机制。它允许你在类、方法、属性、参数等程序元素上附加声明性信息,这些信息可以在编译时或运行时通过反射读取和处理。
例如,内置特性 [Obsolete] 可以标记某个方法已过时,编译器会给出警告:
[Obsolete(“此方法已废弃,请使用 NewMethod”)]void OldMethod() { }
如何创建自定义特性?
自定义特性是一个继承自 System.Attribute 的类。通常命名以 “Attribute” 结尾,但在使用时可以省略该后缀。
下面是一个简单的自定义特性的定义:
[AttributeUsage(AttributeTargets.Method)] // 限制只能用于方法public class LogActionAttribute : Attribute{ public string ActionName { get; set; }
public LogActionAttribute(string actionName){ ActionName = actionName;}
}
说明:
AttributeUsage 指定该特性可应用的目标(如类、方法、属性等)。构造函数用于在使用特性时传入必要参数。公共属性可用于传递额外的命名参数。
如何使用自定义特性?
定义好特性后,就可以将其应用到目标代码元素上。
class Program{[LogAction(“用户登录”, ActionName = “Authentication”)]public static void Login(){Console.WriteLine(“执行登录操作”);}}
上面代码中,[LogAction(“用户登录”)] 将特性附加到 Login 方法上,其中 “用户登录” 是构造函数参数,ActionName 是命名参数。
如何在运行时读取特性?
通过反射可以检查某个方法是否被特定特性标记,并获取其数据。
static void Main(){var method = typeof(Program).GetMethod(“Login”);var attribute = method.GetCustomAttribute();
if (attribute != null){ Console.WriteLine($"动作描述: {attribute.ActionName}");}// 执行方法Login();
}
输出结果:
动作描述: Authentication执行登录操作
这种机制常用于日志记录、权限验证、序列化控制、API 文档生成等场景。
基本上就这些。自定义特性不复杂但容易忽略细节,比如作用目标和是否允许多次使用(AllowMultiple),记得用 AttributeUsage 明确约束。
以上就是C#的特性(Attribute)是什么?如何创建和使用自定义特性?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442090.html
微信扫一扫
支付宝扫一扫