当前位置: 首页 > news >正文

c#定义特性,通过反射获取特性

当你定义了一个特性,并将其应用到类或方法上后,你可以使用反射来获取这些特性的信息。以下是一个简单的示例,展示如何使用反射来获取类和方法的特性信息:

using System;
using System.Reflection;// 定义一个特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{public string Description { get; set; }public MyCustomAttribute(string description){Description = description;}
}// 应用特性
[MyCustomAttribute("This is a class description")]
class MyClass
{[MyCustomAttribute("This is a method description")]public void MyMethod(){// 方法体}
}class Program
{static void Main(){// 获取 MyClass 类上的特性Type myClassType = typeof(MyClass);object[] classAttributes = myClassType.GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attribute in classAttributes){Console.WriteLine("Class Description: " + attribute.Description);}// 获取 MyMethod 方法上的特性MethodInfo myMethod = myClassType.GetMethod("MyMethod");object[] methodAttributes = myMethod.GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attribute in methodAttributes){Console.WriteLine("Method Description: " + attribute.Description);}}
}

在上面的示例中,我们使用了反射来获取 MyClass 类和 MyMethod 方法上的特性信息。首先,我们使用 typeof 运算符获取 MyClass 类的 Type 对象,然后使用 GetCustomAttributes 方法来获取类和方法上的特性信息。

通过这样的方式,我们可以在运行时访问并读取类和方法上的特性信息,以获取它们的元数据信息。希望这个示例对你有所帮助。如果你有任何问题,请随时问我。

相关文章:

  • 基于SSM的网络办公系统(有报告)。Javaee项目。ssm项目。
  • 探索Gin框架:快速构建高性能的Golang Web应用
  • Flutter App 生命周期观察监听
  • 爬虫(一)
  • SpringBoot项目配置SSL后,WebSocket连接失败的解决方案
  • FIR数字滤波器设计
  • 03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)
  • STM32+ESP8266 实现物联网设备节点
  • 使用IntelliJ IDEA快速搭建springboot 基础模板项目
  • 代码随想录算法刷题训练营day17
  • Windows11 鼠标拖动文件到CMD控制终端窗口无效,无法显示具体文件路径
  • python sqlite3 线程池封装
  • 【服务器】安装宝塔面板
  • 使用 Optional 优雅处理可能为null的值
  • LeetCode:376.摆动序列
  • 【Leetcode】101. 对称二叉树
  • 分享一款快速APP功能测试工具
  • 【Linux系统编程】快速查找errno错误码信息
  • 2019.2.20 c++ 知识梳理
  • ES2017异步函数现已正式可用
  • ES6--对象的扩展
  • ES6简单总结(搭配简单的讲解和小案例)
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • go语言学习初探(一)
  • leetcode46 Permutation 排列组合
  • Mysql优化
  • PhantomJS 安装
  • Python利用正则抓取网页内容保存到本地
  • Spring框架之我见(三)——IOC、AOP
  • Vue 2.3、2.4 知识点小结
  • vue.js框架原理浅析
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里云应用高可用服务公测发布
  • 大型网站性能监测、分析与优化常见问题QA
  • 复杂数据处理
  • 关于字符编码你应该知道的事情
  • 记录一下第一次使用npm
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用API自动生成工具优化前端工作流
  • 使用Swoole加速Laravel(正式环境中)
  • 微服务核心架构梳理
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # 飞书APP集成平台-数字化落地
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #微信小程序:微信小程序常见的配置传值
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)一些感悟