在 C# 开发中,反射 + 特性是进阶必备技能,它们是框架设计的核心武器:特性给代码打标签,反射动态读取标签,无需硬编码就能实现灵活逻辑。
本文用极简代码,带你吃透三大核心用法:动态配置、轻量 ORM、权限校验,新手也能快速上手。
一、基础概念:什么是反射与特性?
1. 特性 (Attribute)
给类、方法、属性打「标记」的注解,不影响代码运行,仅存储元数据; 格式: [特性名(参数)],C# 自带[Obsolete],也可自定义。
2. 反射 (Reflection)
程序运行时,动态读取类型、属性、方法、特性的能力; 核心类: Type、Assembly、Attribute.GetCustomAttribute()。
二、场景 1:动态配置(极简版)
核心思路
用特性标记配置项,反射自动读取,无需手动赋值,实现配置解耦。
完整极简代码
知识点
自定义特性需继承 Attribute;[AttributeUsage]限定特性使用范围; Type.GetProperties()+ GetCustomAttribute()反射读取特性;PropertyInfo.SetValue()动态赋值。
三、场景 2:轻量 ORM 框架(映射数据库)
核心思路
特性标记「类对应表、属性对应列」,反射自动生成 SQL,告别硬编码。
完整极简代码
知识点
特性分离「实体类」与「数据库结构」,修改表名无需改代码; 反射批量读取特性,自动生成 SQL; 真实 ORM(EF/Dapper)底层均基于此原理。
四、场景 3:权限校验(方法拦截)
核心思路
特性标记「需要什么权限」,反射动态校验,统一权限逻辑。
完整极简代码
知识点
特性声明权限规则,无侵入式代码; 反射获取方法特性,统一做权限拦截; 常用于 API 接口、后台管理权限系统。
五、核心总结
特性 = 打标签:存储元数据,不影响业务逻辑;
反射 = 读标签:运行时动态解析,实现灵活扩展;
三大场景:
动态配置:自动绑定配置项; ORM 框架:实体与数据库自动映射; 权限校验:统一拦截、动态鉴权。
反射 + 特性是 C# 框架设计的基石,学会它,就能轻松读懂各类开源框架源码!