C# 通过反射获取方法/类上的自定义特性

  1.所有自定义属性都必须继承System.Attribute 

   2.自定义属性的类名称必须为 XXXXAttribute 即是已Attribute结尾

 

自定义属性QuickWebApi

 [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]public class QuickWebApiAttribute: Attribute{public QuickWebApiAttribute(string _serviceCode,string _controllerName,string _actionName){ServicesCode = _serviceCode;ControllerName = _controllerName;ActionName = _actionName;}public string ServicesCode{ get; set; }public string ControllerName { get; set; }public string ActionName { get; set; }}

接口类

    public interface ISchool{[QuickWebApi("SchoolServices", "School", "GetSchoolAll")]List<School> GetSchoolAll();[QuickWebApi("SchoolServices", "School", "GetSchoolListById")]List<School> GetSchoolListById(string schoolId);}

具体实现

   static void Main(string[] args){Type t = typeof(ISchool);//获取方法特性中ActionName为GetSchoolAll的特性var b = t.GetMethods().Single(p => CustomAttributeExtensions.GetCustomAttribute<QuickWebApiAttribute>(p).ActionName == "GetSchoolAll");QuickWebApiAttribute  qu= CustomAttributeExtensions.GetCustomAttribute<QuickWebApiAttribute>(b);//循环遍历foreach (MemberInfo p in t.GetMethods()){object[] Attribute1 = p.GetCustomAttributes(true);object[] Attribute2 = p.GetCustomAttributes(typeof(QuickWebApiAttribute), false);//获取遍历结果//QuickWebApiAttribute att = CustomAttributeExtensions.GetCustomAttribute<QuickWebApiAttribute>(p);string a = "";}Console.ReadKey();}

知识扩展

 1 public enum AttributeTargets  
 2    {  
 3        // 摘要:  
 4        //     可以对程序集应用特性。  
 5        Assembly = 1,  
 6        //  
 7        // 摘要:  
 8        //     可以对模块应用特性。  
 9        Module = 2,  
10        //  
11        // 摘要:  
12        //     可以对类应用特性。  
13        Class = 4,  
14        //  
15        // 摘要:  
16        //     可以对结构应用特性,即值类型。  
17        Struct = 8,  
18        //  
19        // 摘要:  
20        //     可以对枚举应用特性。  
21        Enum = 16,  
22        //  
23        // 摘要:  
24        //     可以对构造函数应用特性。  
25        Constructor = 32,  
26        //  
27        // 摘要:  
28        //     可以对方法应用特性。  
29        Method = 64,  
30        //  
31        // 摘要:  
32        //     可以对属性应用特性。  
33        Property = 128,  
34        //  
35        // 摘要:  
36        //     可以对字段应用特性。  
37        Field = 256,  
38        //  
39        // 摘要:  
40        //     可以对事件应用特性。  
41        Event = 512,  
42        //  
43        // 摘要:  
44        //     可以对接口应用特性。  
45        Interface = 1024,  
46        //  
47        // 摘要:  
48        //     可以对参数应用特性。  
49        Parameter = 2048,  
50        //  
51        // 摘要:  
52        //     可以对委托应用特性。  
53        Delegate = 4096,  
54        //  
55        // 摘要:  
56        //     可以对返回值应用特性。  
57        ReturnValue = 8192,  
58        //  
59        // 摘要:  
60        //     可以对泛型参数应用特性。  
61        GenericParameter = 16384,  
62        //  
63        // 摘要:  
64        //     可以对任何应用程序元素应用特性。  
65        All = 32767,  
66    }  

 

转载于:https://www.cnblogs.com/happygx/p/9066714.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud Zuul网关(快速搭建)

zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。 在云平台上提供动态路由&#xff0c;监控&#xff0c;弹性&#xff0c;安全等边缘服务的框架。相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。主要功能是路由转发和过滤器。 Zuul可…

10.13 上午 考试

T1 直接二分就好了 #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <cstdlib> #include <algorithm> #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) using namespace std;ll n; in…

前端安全之token

前端可以通过cookie以js的方式存取token&#xff0c;并且实现用户的登录登出以及token的超时操作&#xff0c;但这样做并不安全&#xff0c;无法避免跨站脚本的攻击&#xff0c;如果对项目的安全性要求比较高&#xff0c;应该在服务端开启http only为true&#xff0c;通过服务端…

gbk 转 UTF-8

iconv命令 gbk 转 UTF-8 -----linux gbk 转 UTF-8-------- iconv 用法 iconv -f "gbk" -t "utf-8" < infile > outfile 或者 piconv -f "gbk" -t "utf-8" < infile > outfile iconv -f utf-8 -t GBK 123456.txt 对传文件…

Mybatis中输入输出映射和动态Sql

一、输入映射我们通过配置parameterType的值来指定输入参数的类型&#xff0c;这些类型可以是简单数据类型、POJO、HashMap等数据类型1、简单类型2、POJO包装类型①这是单表查询的时候传入的POJO包装类型&#xff0c;即可以直接传入实体类&#xff0c;但是当多表查询的时候&…

css纯字母或者字母换行显示

white-space:normal; word-break:break-all;转载于:https://www.cnblogs.com/mmykdbc/p/7661009.html

javascript使用btoa和atob来进行Base64转码和解码

javascript中如何使用Base64转码 let str javascript;let btoaStr window.btoa(str); //转码结果 amF2YXNjcmlwdAconsole.log(btoaStr);console.log(window.atob(btoaStr)); //解码结果 javascriptBase64转码的对象只能是字符串, var str "China&#xff0c;中国"…

珠宝条码打印扫描解决方案

随着人们生活水平的逐步提高&#xff0c;珠宝消费日益增长&#xff0c;据统计&#xff0c;我国珠宝首饰零售规模超过7000亿&#xff0c;过去5年复合增长为15%&#xff0c;是规模增长最为迅速的可选消费品类之一。面对千亿级的消费市场&#xff0c;珠宝行业竞争激烈&#xff0c;…

课程作业1

1使用组合数公式利用n!来计算 a.设计思想 定义n和k&#xff0c;用递归函数表示出N!的阶乘结果&#xff0c;c(n,k)n!/(k!(n-k)!);调用函数求出c(n,k)的结果 b.源代码 package kecheng1; import java.util.Scanner; public class Test {public static void main(String[] args) {…

新手学Python推荐的四本书籍+2个资源网站

2019独角兽企业重金招聘Python工程师标准>>> 很多伙伴初学Python&#xff0c;会问到&#xff1a;有没有好的学习书籍推荐&#xff1f;有没有好的学习网站推荐&#xff1f; 针对这类伙伴的问题&#xff0c;小优给大家整理了学习Python的四本书籍2个资源网站&#xff…

【转】Linux系统编程---dup和dup2详解

正常的文件描述符&#xff1a; 在linux下&#xff0c;通过open打开以文件后&#xff0c;会返回一个文件描述符&#xff0c;文件描述符会指向一个文件表&#xff0c;文件表中的节点指针会指向节点表。看下图&#xff1a; 打开文件的内核数据结构 dup和dup2两个函数都可以用来复制…

Android Activity标签属性

Android Activity标签属性 Activity 是 Android 系统四大应用组件之一&#xff0c;用户可与 Activity 提供的屏幕进行交互&#xff0c;以执行拨打电话、拍摄照片、发送电子邮件等操作开发者必须在清单文件中声明要使用的 Activity&#xff0c;这样系统才能访问它。声明方式是在…

Java -----JVM运行时数据区

一、JVM体系结构 想要了解运行时数据区&#xff0c;先关注一下JVM的体系结构&#xff0c;知道数据区在JVM的整体位置和作用。 二、JVM运行时数据区 1.程序计数器 一块较小的内存空间&#xff0c;它是当前线程所执行的字节码的行号指示器&#xff0c;字节码解释器工作时通过改变…

20155235 《网络攻防》 实验八 Web基础

20155235 《网络攻防》 实验八 Web基础 实验内容 Web前端HTML(0.5分) 能正常安装、启停Apache。理解HTML&#xff0c;理解表单&#xff0c;理解GET与POST方法,编写一个含有表单的HTML。Web前端javascipt(0.5分) 理解JavaScript的基本功能&#xff0c;理解DOM。编写JavaScript验…

python每天1道面试题(3)--字符串组合

""" 题目3&#xff1a;输入一个字符串&#xff0c;输出该字符串中字符的所有组合。举个例子&#xff0c;如果输入abc&#xff0c;它的组合有a、b、c、ab、ac、bc、abc。解题思路: 先用列举法,举例出组合元素长度分别是1,2,..,len(str)时的具体元素, 然后发现当数…

【每周一图】蜂鸟

摄影/祈澈姑娘小花园偶遇的一只蜂鸟转载于:https://www.cnblogs.com/wangting888/p/9702088.html

API网关如何实现对服务下线实时感知

上篇文章《Eureka 缓存机制》介绍了Eureka的缓存机制&#xff0c;相信大家对Eureka 有了进一步的了解&#xff0c;本文将详细介绍API网关如何实现服务下线的实时感知。 一、前言 在基于云的微服务应用中&#xff0c;服务实例的网络位置都是动态分配的。而且由于自动伸缩、故障和…

TCP为什么要三次握手和四次挥手

http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试题 https://www.zhihu.com/question/36930631 TCP四次分手中&#xff0c;主动关闭方最后为什么要等待2MSL之后才关闭连接&#xff1f; http://ww…

Java处理文件BOM头的方式推荐

背景&#xff1a; java普通的文件读取方式对于bom是无法正常识别的。 使用普通的InputStreamReader&#xff0c;如果采用的编码正确&#xff0c;那么可以获得正确的字符&#xff0c;但bom仍然附带在结果中&#xff0c;很容易导致数据处理出错。另外&#xff0c;对于存在BOM头的…

封装svg组件

如何封装svg图标组件 封装svg图标组件的方法有很多种&#xff0c;如果只是单纯的想使用svg图标&#xff0c;可以将svg导出fonts字体图标使用&#xff0c;但这样做会失去svg原有的样式与尺寸&#xff0c;也可以当成img图片或者背景引入&#xff0c;但这样做非常繁琐。 最近项目中…