Использование Reflection для поиска амортизации - PullRequest
5 голосов
/ 09 февраля 2011

Мне любопытно, если кто-нибудь написал какой-либо код для отражения в классе и найти его устаревшие методы?

Я взбил шаблон T4 для реактивов и хотел бы, чтобы он прекратил генерировать обработчики для устаревших событий, какие-нибудь умные хакеры, которые уже били меня до удара?

1 Ответ

8 голосов
/ 09 февраля 2011

Я не знаю, запрашиваете ли вы t4 framework или нет, но вот общий пример отражения для устаревших помеченных методов.

class TestClass
{
    public TestClass()
    {
        DeprecatedTester.FindDeprecatedMethods(this.GetType());
    }

    [Obsolete("SomeDeprecatedMethod is deprecated, use SomeNewMethod instead.")]
    public void SomeDeprecatedMethod() { }

    [Obsolete("YetAnotherDeprecatedMethod is deprecated, use SomeNewMethod instead.")]
    public void YetAnotherDeprecatedMethod() { }

    public void SomeNewMethod() { }        
}

public class DeprecatedTester
{
    public static void FindDeprecatedMethods(Type t)
    {
        MethodInfo[] methodInfos = t.GetMethods();

        foreach (MethodInfo methodInfo in methodInfos)
        {
            object[] attributes = methodInfo.GetCustomAttributes(false);

            foreach (ObsoleteAttribute attribute in attributes.OfType<ObsoleteAttribute>())
            {
                Console.WriteLine("Found deprecated method: {0} [{1}]", methodInfo.Name, attribute.Message);
            }
        }
    }
}
...