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# 通过反射获取方法/类上的自定义特性的更多相关文章

  1. c#通过反射获取类上的自定义特性

    c#通过反射获取类上的自定义特性 本文转载:http://www.cnblogs.com/jeffwongishandsome/archive/2009/11/18/1602825.html 下面这个 ...

  2. C#提高--------------获取方法返回值的自定义特性(Attribute)

    .NET(C#):获取方法返回值的自定义特性(Attribute) 转载 2013年05月08日 10:54:42 1456 来自:http://www.cnblogs.com/mgen/archiv ...

  3. java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。

    首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一.  类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...

  4. <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数

    说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...

  5. Java实现通过反射获取指定类的所有信息

    package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.l ...

  6. org.reflections 接口通过反射获取实现类源码研究

    org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...

  7. 获取枚举值上的Description特性说明

    /// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T&q ...

  8. java-通过反射获取目标类的属性,方法,构造器

    首先定义一个urse package com.studay_fanshe; public class User { private String uname; private int age; pri ...

  9. 通过反射获取方法的参数名称(JDK8以上支持)

    方法的参数名,在很多时候我们是需要反射得到的.但是在java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比.(java是静态 ...

随机推荐

  1. [uwp]ImageSource和byte[]相互转换

    最近做一个小app遇到一个问题,到目前还没有比较好的解决方法(可能是我查的资料不够多) 需求如下: 1.把一个Image中的图像保存到字节数组: 2.把字节数组转换为ImageSource,通过Ima ...

  2. org.springframework.dao.CannotAcquireLockException解决

    java.sql.SQLException: Lock wait timeout exceeded 该异常为一个service中调用了另一个service,两个service对同一表进行操作,造成事务 ...

  3. pod-infrastructure:latest镜像下载失败

    报错一:image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be be ...

  4. django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件

    一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...

  5. JAVA的学习内容

    http://www.weixueyuan.net/java/rumen/ 安卓学习文档 http://www.runoob.com/w3cnote/android-tutorial-linearla ...

  6. linux命令之用户管理及用户信息查询命令(下)

    1.visudo:编辑sudoers文件 该命令专门用来编辑/etc/sudoers文件,同时提供语法检查等功能. 示例: 1)执行visudo对普通用户授权 [root@boxiaoyuan ~]# ...

  7. RPC 简单小试

    由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 :  --> 点击这里 RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器 ...

  8. Sphinx全文检索

    全文检索 一.生活中的数据总体分为: 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据:指没有固定格式或不定长的数据,如邮件,word文档等. 非结构化数据还有一种叫法: ...

  9. 【OCP-12c】CUUG 071题库考试原题及答案解析(16)

    16.(7-5) choose the best answerThe PRODUCTS table has the following structure:Evaluate the following ...

  10. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...