1. 程式人生 > >.NET(C#):獲取方法返回值的自定義特性(Attribute)

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

.NET中特性的索取就是圍繞著ICustomAttributeProvider介面(System.Reflection名稱空間內),而MethodInfo類的ReturnTypeCustomAttributes屬性直接返回方法返回值的ICustomAttributeProvider介面物件。同時MethodBase的ReturnParameter屬性返回方法返回值資訊(ParameterInfo),而ParameterInfo也是繼承ICustomAttributeProvider的,所以這兩個屬性都可以得到方法返回值的特性。注意基類MethodBase沒有相應屬性,由於ConstructorInfo(代表建構函式資訊)沒有返回值。

程式碼:

using System;

using System.Reflection;

namespace Mgen

{

    [AttributeUsage(AttributeTargets.ReturnValue)]

classMyAttr : Attribute

    {

publicint Data { get; set; }

    }

classProgram

    {

staticvoid Main(string[] args)

        {

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

            test(method

.ReturnTypeCustomAttributes);

            test(method.ReturnParameter);

        }

staticvoid 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)]

publicstatic string doo()

        {

return"hehe";

        }

    }

}


輸出兩個17. 兩種方法都可以獲取返回值的自定義特性。