zoukankan      html  css  js  c++  java
  • C#提高--------------获取方法返回值的自定义特性(Attribute)

    .NET(C#):获取方法返回值的自定义特性(Attribute)

    转载 2013年05月08日 10:54:42

    来自:http://www.cnblogs.com/mgen/archive/2011/11/02/2233374.html

    .NET中特性的索取就是围绕着ICustomAttributeProvider接口(System.Reflection命名空间内),而MethodInfo类的ReturnTypeCustomAttributes属性直接返回方法返回值的ICustomAttributeProvider接口对象。同时MethodBase的ReturnParameter属性返回方法返回值信息(ParameterInfo),而ParameterInfo也是继承ICustomAttributeProvider的,所以这两个属性都可以得到方法返回值的特性。注意基类MethodBase没有相应属性,由于ConstructorInfo(代表构造函数信息)没有返回值。

    代码:

    using System;

    using System.Reflection;

    namespace Mgen

    {

        [AttributeUsage(AttributeTargets.ReturnValue)]

        class MyAttr : Attribute

        {

            public int Data { get; set; }

        }

        class Program

        {

            static void Main(string[] args)

            {

                var method = typeof(Program).GetMethod("doo");

                test(method.ReturnTypeCustomAttributes);

                test(method.ReturnParameter);

            }

            static void test(ICustomAttributeProvider customAttrProvider)

            {

                if (customAttrProvider.IsDefined(typeof(MyAttr), false))

                {

                    var att = (MyAttr)customAttrProvider.GetCustomAttributes(typeof(MyAttr), false)[0];

                    Console.WriteLine(att.Data);

                }

            }

            [return: MyAttr(Data = 17)]

            public static string doo()

            {

                return "hehe";

            }

        }

    }

  • 相关阅读:
    sys、os 模块
    sh 了解
    TCP协议的3次握手与4次挥手过程详解
    python argparse(参数解析)模块学习(二)
    python argparse(参数解析)模块学习(一)
    Day17--Python--面向对象--成员
    Day16--Python--初识面向对象
    Day14--Python--函数二,lambda,sorted,filter,map,递归,二分法
    Day013--Python--内置函数一
    Day12--Python--生成器,生成器函数,推导式,生成器表达式
  • 原文地址:https://www.cnblogs.com/w-wfy/p/7670969.html
Copyright © 2011-2022 走看看