0

0

C#怎么自定义特性 C# Attribute的定义和使用场景

小老鼠

小老鼠

发布时间:2025-11-18 11:15:34

|

208人浏览过

|

来源于php中文网

原创

自定义特性是继承Attribute的类,用于添加元数据并结合反射在运行时读取。1. 定义时使用[AttributeUsage]指定目标、是否允许多次使用及继承性;2. 应用时以[特性名]标记类、方法等;3. 通过反射获取特性实例并处理。典型场景包括日志监控、权限验证、序列化控制、MVC路由过滤、数据校验和AOP编程。命名建议以"Attribute"结尾,使用时可省略后缀,构造函数传必填参数,属性设可选值,保持特性轻量不可变,合理配置AttributeUsage。

c#怎么自定义特性 c# attribute的定义和使用场景

在 C# 中,自定义特性(Custom Attribute) 是一种允许你在代码中添加元数据的机制。这些元数据可以在运行时通过反射读取,用于控制程序行为、标记类或方法用途、实现 AOP(面向切面编程)、序列化控制等场景。

一、如何定义自定义特性

自定义特性本质上是一个继承自 System.Attribute 的类。你可以通过以下步骤创建:

1. 创建特性类

使用 [AttributeUsage] 指定该特性可以应用的目标(如类、方法、属性等):

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class LogActionAttribute : Attribute
{
    public string Description { get; set; }
    public bool Enabled { get; set; }
public LogActionAttribute(string description)
{
    Description = description;
    Enabled = true;
}

}

  • AttributeTargets:指定能应用此特性的程序元素,比如 Class、Method、Property 等。
  • AllowMultiple:是否允许多次应用于同一目标。
  • Inherited:是否被派生类或重写成员继承。

2. 应用自定义特性

将特性添加到类、方法或其他支持的目标上:

[LogAction("用户登录操作", Enabled = true)]
public class LoginService
{
    [LogAction("验证用户名密码")]
    public bool ValidateUser(string username, string password)
    {
        return !string.IsNullOrEmpty(username);
    }
}

3. 在运行时读取特性信息(使用反射)

通过反射获取类型或成员上的特性,并进行相应处理:

var method = typeof(LoginService).GetMethod("ValidateUser");
var attr = method.GetCustomAttribute();

if (attr != null && attr.Enabled) { Console.WriteLine($"正在执行: {attr.Description}"); }

二、自定义特性的典型使用场景

1. 日志与监控

标记需要记录日志的方法或服务,配合拦截机制自动输出调用信息。

声讯电话整站程序
声讯电话整站程序

>声讯电话网站特点介绍:>电信级通话质量>多用户商城模式>自助发布声讯服务>自定义服务收费>傻瓜后台,人性设置>分账式声讯商业模式>自定义分成比例>详细的通话明细>清晰的账务流水明细>使用ASP.Net(c#)、三层结构开发>在线支付:网银在线接口>销售统计>竞价排名功能>温情推荐,固顶显示>UTF-8

下载

2. 权限验证

例如定义 [RequireRole("Admin")] 特性,在进入方法前检查用户角色。

3. 序列化控制

像 JSON 或 XML 序列化库常用 [JsonProperty]、[XmlIgnore] 这类特性来控制字段行为。

4. MVC/WebAPI 中的路由和过滤器

ASP.NET Core 大量使用特性,如 [HttpGet]、[Authorize]、[ValidateAntiForgeryToken]。

5. 配置验证

为模型添加数据注解特性,如 [Required]、[StringLength(100)],用于输入校验。

6. AOP 编程(结合 IoC 容器或动态代理

在方法执行前后插入逻辑,比如性能监控、事务管理等。

三、命名约定与最佳实践

  • 特性类名通常以 "Attribute" 结尾,但使用时可省略该后缀(如 [LogAction] 实际对应 LogActionAttribute)。
  • 构造函数参数是必需参数,属性用于可选配置。
  • 避免在特性中包含复杂逻辑或状态,应保持轻量且不可变。
  • 合理设置 AttributeUsage,防止误用。

基本上就这些。自定义特性 + 反射是构建灵活框架的重要手段,掌握它能让你写出更具扩展性的代码。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

408

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1868

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2084

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

968

2024.11.28

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

463

2024.01.03

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号