.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
test(method.ReturnParameter);
}
staticvoid test(ICustomAttributeProvider customAttrProvider)
{
if (customAttrProvider.IsDefined(typeof(MyAttr), false))
{
var att = (MyAttr)customAttrProvider.GetCustomAttributes(typeof(MyAttr), false
Console.WriteLine(att.Data);
}
}
[return: MyAttr(Data =17)]
publicstatic string doo()
{
return"hehe";
}
}
}
輸出兩個17. 兩種方法都可以獲取返回值的自定義特性。