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. Javascript对象的几种创建方式

    (1) 工厂模式 Function(){ Var child = new object() Child.name = “欲泪成雪” Child.age=”20” Return child; } Var ...

  2. mxonline实战10,课程列表页,课程详情页1

    对应github地址:第10天   一. 课程列表页   1. 拷贝course-list.html到templates目录中 2. 编写url和view 在courses/views.py中新加

  3. 爬虫3:requests库

      一个简单易用的http库,多用于第一步,爬取网站源码   简单例子 import requests   response = requests.get('https://www.baidu.com ...

  4. 爬虫2:urllib

        了解即可,不好用   一. 概述   python内置的http请求库,包括4个模块,分别如下   urllib.request   请求模块 urllib.error       异常处理模 ...

  5. eclipse的classpath(build path)和classpaht几种设置的方式

    1,默认eclipse有自己的classpath的路径并不是环境变量中配置的classpah. 2,eclipse的classpath每个项目不同,一般是在工作区的当前项目的class下. 2.1,可 ...

  6. Linux之Ubuntu切换root su -

    当在Ubuntu系统从普通用户切换到root用户时,总是会报错,提示错误信息.这时因为我们还没有给系统中的root用户设置密码,我们给Ubuntu系统中的root用户设置一个密码就可以实现普通用户和管 ...

  7. P2051 中国象棋

    P2051 中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中 ...

  8. java连接hbase时出现....is accessible from more than one module:

    今天在用java程序连接hbase时,出现错误,The package org.apache.hadoop.hbase is accessible from more than one module: ...

  9. sql自查询各种状态数据总和

  10. Github使用笔记

    ========================Github使用===================概念解释:远程仓库Remote:就是指保存在github网站里的代码;本地仓库Repository ...