2011-02-08 25 views
5

Tengo curiosidad si alguien ha escrito ningún código para reflejar en una clase y encontrar sus métodos obsoletos?utilizando la reflexión para encontrar desaprobación

He convertido una plantilla T4 para reactiva y me gustaría que dejara de generar controladores para eventos obsoletos, ¿algún hacker inteligente que me haya golpeado?

+0

¿Está utilizando la reflexión con T4? Esto es [no recomendado] (http://www.olegsych.com/2007/12/how-to-use-t4-to-generate-decorator-classes/). – Ani

+0

¿Te refieres a los miembros marcado como obsoleto (es que parte del marco reactiva?) – RQDQ

+0

modifica una plantilla T4 para generar observables de los delegados de interfaz de usuario y sería recoger los eventos en desuso, sólo necesitaba para filtrar hacia fuera en generación. –

Respuesta

8

No sé si está pidiendo el marco t4 o no, pero aquí hay una muestra de reflexión genérica para los métodos marcados obsoletos.

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); 
      } 
     } 
    } 
} 
+1

Perfección, gracias amigo. –

+0

de nada. – HuseyinUslu

+5

Por cierto, GetCustomAttributes() está sobrecargado y puede tomar un parámetro de tipo. Entonces, para verificar si un método está en desuso, simplemente pasa 'typeof (ObsoleteAttribute)'. El comprobador que estoy usando (para valores enum) es: 'return obj.GetType(). GetField (obj.ToString()). GetCustomAttributes (typeof (System.ObsoleteAttribute), true) .Length> 0;' – piojo

Cuestiones relacionadas