Вызов метода со значением атрибута в C # - PullRequest
3 голосов
/ 26 марта 2012
[AttributeUsage(AttributeTargets.Method,AllowMultiple=true)]
public class MethodId : Attribute
{
    private int mId;
    public MethodId(int mId)
    {
        this.mId = mId;
    }

    public int methodId
    {
        get { return this.mId; }
        set { this.mId = value; }
    }
}

public class Methods
{
    [MethodId(1)]
    public void square()
    {        }

    [MethodId(2)]
    public void Notify()
    {        }
}

Как получить доступ к square () в main () или в любом другом классе с помощью MethodId?

1 Ответ

9 голосов
/ 26 марта 2012
private static MethodInfo GetMethodInfo(int id)
{
        return typeof(Methods).GetMethods().
            Where(x => x.GetCustomAttributes(false).OfType<MethodId>().Count() > 0)
            .Where(x => x.GetCustomAttributes(false).OfType<MethodId>().First().methodId == id)
            .First();
}

И использование:

var methodInfo = GetMethodInfo(1);
methodInfo.Invoke(new Methods(), null);

ПРИМЕЧАНИЕ:

Это решение предназначено только для отображения, как это сделать. Не оптимизирован для производительности. В идеале вы бы кешировали methodInfos.

...