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();
}
知识扩展
public enum AttributeTargets
{
// 摘要:
// 可以对程序集应用特性。
Assembly = ,
//
// 摘要:
// 可以对模块应用特性。
Module = ,
//
// 摘要:
// 可以对类应用特性。
Class = ,
//
// 摘要:
// 可以对结构应用特性,即值类型。
Struct = ,
//
// 摘要:
// 可以对枚举应用特性。
Enum = ,
//
// 摘要:
// 可以对构造函数应用特性。
Constructor = ,
//
// 摘要:
// 可以对方法应用特性。
Method = ,
//
// 摘要:
// 可以对属性应用特性。
Property = ,
//
// 摘要:
// 可以对字段应用特性。
Field = ,
//
// 摘要:
// 可以对事件应用特性。
Event = ,
//
// 摘要:
// 可以对接口应用特性。
Interface = ,
//
// 摘要:
// 可以对参数应用特性。
Parameter = ,
//
// 摘要:
// 可以对委托应用特性。
Delegate = ,
//
// 摘要:
// 可以对返回值应用特性。
ReturnValue = ,
//
// 摘要:
// 可以对泛型参数应用特性。
GenericParameter = ,
//
// 摘要:
// 可以对任何应用程序元素应用特性。
All = ,
}
C# 通过反射获取方法/类上的自定义特性的更多相关文章
- c#通过反射获取类上的自定义特性
c#通过反射获取类上的自定义特性 本文转载:http://www.cnblogs.com/jeffwongishandsome/archive/2009/11/18/1602825.html 下面这个 ...
- C#提高--------------获取方法返回值的自定义特性(Attribute)
.NET(C#):获取方法返回值的自定义特性(Attribute) 转载 2013年05月08日 10:54:42 1456 来自:http://www.cnblogs.com/mgen/archiv ...
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...
- <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数
说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...
- Java实现通过反射获取指定类的所有信息
package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.l ...
- org.reflections 接口通过反射获取实现类源码研究
org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...
- 获取枚举值上的Description特性说明
/// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T&q ...
- java-通过反射获取目标类的属性,方法,构造器
首先定义一个urse package com.studay_fanshe; public class User { private String uname; private int age; pri ...
- 通过反射获取方法的参数名称(JDK8以上支持)
方法的参数名,在很多时候我们是需要反射得到的.但是在java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比.(java是静态 ...
随机推荐
- [uwp]ImageSource和byte[]相互转换
最近做一个小app遇到一个问题,到目前还没有比较好的解决方法(可能是我查的资料不够多) 需求如下: 1.把一个Image中的图像保存到字节数组: 2.把字节数组转换为ImageSource,通过Ima ...
- org.springframework.dao.CannotAcquireLockException解决
java.sql.SQLException: Lock wait timeout exceeded 该异常为一个service中调用了另一个service,两个service对同一表进行操作,造成事务 ...
- pod-infrastructure:latest镜像下载失败
报错一:image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be be ...
- django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件
一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...
- JAVA的学习内容
http://www.weixueyuan.net/java/rumen/ 安卓学习文档 http://www.runoob.com/w3cnote/android-tutorial-linearla ...
- linux命令之用户管理及用户信息查询命令(下)
1.visudo:编辑sudoers文件 该命令专门用来编辑/etc/sudoers文件,同时提供语法检查等功能. 示例: 1)执行visudo对普通用户授权 [root@boxiaoyuan ~]# ...
- RPC 简单小试
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器 ...
- Sphinx全文检索
全文检索 一.生活中的数据总体分为: 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据:指没有固定格式或不定长的数据,如邮件,word文档等. 非结构化数据还有一种叫法: ...
- 【OCP-12c】CUUG 071题库考试原题及答案解析(16)
16.(7-5) choose the best answerThe PRODUCTS table has the following structure:Evaluate the following ...
- 【文文殿下】浅谈KMP算法next数组与循环节的关系
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...