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

Attribute(特性)是 .NET 中一种为代码元素添加元数据的机制。它允许你在类、方法、属性、参数等程序元素上附加声明性信息,这些信息可以在运行时通过反射读取,用于控制行为、配置框架或实现横切关注点。
特性本身不直接影响代码逻辑,但可以被编译器、运行时或第三方库识别和处理。例如:
这些都通过特性提供额外信息,供框架在运行时使用。
要创建自定义特性,需定义一个继承自 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
{
// ...
}
说明:
若未指定,默认可应用于大多数元素且不允许重复。
定义后,可以直接在目标代码上使用,省略 "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是什么?如何创建和使用自定义特性?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号