开发者

How to interrogate method attributes via a delegate?

开发者 https://www.devze.com 2022-12-17 09:50 出处:网络
I have a method with a custom attribute. If I have a delegate that refers to this method can I tell if th开发者_开发知识库e method referred to by the delegate has the attribute or not? Use the GetCust

I have a method with a custom attribute. If I have a delegate that refers to this method can I tell if th开发者_开发知识库e method referred to by the delegate has the attribute or not?


Use the GetCustomAttributes method of the Method property of the delegate. Here's a sample:

    delegate void Del();

    [STAThread]
    static void Main()
    {
        Del d = new Del(TestMethod);
        var v = d.Method.GetCustomAttributes(typeof(ObsoleteAttribute), false);
        bool hasAttribute = v.Length > 0;
    }

    [Obsolete]
    public static void TestMethod()
    {
    }

If the method has the attribute the var v will contain it; otherwise it will be an empty array.


I'm not sure if this is the general case, but I think so. Try the following:

class Program
{
    static void Main(string[] args)
    {
        // display the custom attributes on our method
        Type t = typeof(Program);
        foreach (object obj in t.GetMethod("Method").GetCustomAttributes(false))
        {
            Console.WriteLine(obj.GetType().ToString());
        }

        // display the custom attributes on our delegate
        Action d = new Action(Method);
        foreach (object obj in d.Method.GetCustomAttributes(false))
        {
            Console.WriteLine(obj.GetType().ToString());
        }

    }

    [CustomAttr]
    public static void Method()
    {
    }
}

public class CustomAttrAttribute : Attribute
{
}
0

精彩评论

暂无评论...
验证码 换一张
取 消