Attribute是.NET中用于添加元数据的机制,通过继承System.Attribute创建自定义特性,如AuthorAttribute可标注方法作者信息;使用[AttributeUsage]限定应用目标,如仅用于方法且允许多次使用;通过反射在运行时读取特性数据,实现如AOP、插件化等功能。

Attribute(特性)是 .NET 中一种为代码元素添加元数据的机制。它允许你在类、方法、属性、参数等程序元素上附加声明性信息,这些信息可以在运行时通过反射读取,用于控制行为、配置框架或实现横切关注点。
Attribute 的作用
特性本身不直接影响代码逻辑,但可以被编译器、运行时或第三方库识别和处理。例如:
[Obsolete] 标记方法已过时 [DllImport] 声明非托管 DLL 导出函数 [Serializable] 指示类型可序列化 在 ASP.NET Core 中,[HttpGet] 定义 API 路由行为
这些都通过特性提供额外信息,供框架在运行时使用。
创建自定义特性
要创建自定义特性,需定义一个继承自 System.Attribute 的类。通常以 “Attribute” 结尾命名,但在使用时可省略该后缀。
// 示例:定义一个用于记录方法作者信息的特性
public class AuthorAttribute : Attribute
{
public string Name { get; }
public int Version { get; set; }
public AuthorAttribute(string name)
{
Name = name;
}
}
这个特性包含一个必需参数(name)和一个可选属性(Version)。构造函数参数是必需的,属性可用于额外配置。
限制特性的应用目标
你可以使用 [AttributeUsage] 特性来指定你的自定义特性可以应用于哪些程序元素。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class AuthorAttribute : Attribute
{
// …
}
说明:
AttributeTargets.Method:只能用于方法 AllowMultiple = true:允许在同一元素上多次使用 Inherited = false:子类不继承此特性
若未指定,默认可应用于大多数元素且不允许重复。
使用自定义特性
定义后,可以直接在目标代码上使用,省略 “Attribute” 后缀。
public class MyService
{
[Author(“张三”, Version = 1)]
public void DoWork()
{
// 方法实现
}
[Author(“李四”)]
[Author(“王五”, Version = 2)] // 允许多次使用
public void ProcessData()
{
// 实现
}
}
在运行时读取特性
通过反射可以获取特性信息并做相应处理。
var method = typeof(MyService).GetMethod(“DoWork”);
var authorAttr = method.GetCustomAttribute();
if (authorAttr != null)
{
Console.WriteLine($”作者: {authorAttr.Name}, 版本: {authorAttr.Version}”);
}
输出:
作者: 张三, 版本: 1
也可以用 GetCustomAttributes 获取多个实例。
基本上就这些。自定义特性 + 反射,是实现插件化、AOP、序列化配置等功能的基础。
以上就是.NET中的Attribute是什么?如何创建和使用自定义特性?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442168.html
微信扫一扫
支付宝扫一扫