2010-10-25 16 views

Respuesta

23

Respuesta corta:

Usted tendrá que crear una nueva nethod con la nueva firma, y ​​marcar la corriente obsoleta.

Respuesta larga

Lo que se quiere evitar a toda costa es un salto de código! Entonces, particularmente en el marco de una empresa, desea anunciar que su método ya no será compatible, por ejemplo, pero no desea ser responsable de que las soluciones se bloqueen debido a una decisión de arquitectura o diseño, o por su parte, ¿no?

La clase ObsoleteAttribute hará el truco para usted.

Una vez que un miembro de la clase marcado como obsoleto, una advertencia se planteará en el lado del cliente, los que utilizan su marco, para continuar de esa manera, o incluso uno de su colega en el mismo proyecto.

public class MyClass { 
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.")] 
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    } 

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    } 
} 

Esto anunciar que MyMethod ya no está soportado a lo largo de sus usuarios de código.

Después de un cierto período de tiempo, lo suficientemente razonable como para permitirle a todo el mundo cambiar su código, puede decirle a este atributo que envíe un mensaje de error cuando su método obsoleto aún se usa en el código.

public class MyClass { 
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.", true)] 
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    } 

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    } 
} 

Al establecer el segundo parámetro del constructor ObsoleteAttribute clase para true, que tel el compilador para anunciar el uso de este método como un error.

Después de un tiempo solamente, puede eliminar por completo su método de su código para limpiarlo un poco. Esto es parte de los métodos de refactorización fomentados por la metodología de desarrollo ágil de software.

¿Le sirve de ayuda?

+0

+1 para una respuesta más competitiva y deletreando los pasos. Más informativo que la respuesta de Steves – Gorgen

6

Sí. Solo puede mark types and members of types as obsolete, no parámetros individuales. Se podría, sin embargo, la sobrecarga del método, manteniendo así el mismo nombre y marca la antigua como obsoleto:

class Act 
{ 
    [Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)] 
    public void DoSomething(int i, int j) 
    { 
    } 

    public void DoSomething(int i) 
    { 
    } 
} 
2

Creo que lo mejor sería crear un nuevo método.

¿Qué quiere decir con hacer el parámetro obsoleto? ¿Esto depende de un valor específico para ese argumento? Cuando llama a un método, siempre tiene que especificar el argumento de todos modos.

7

Sí, creo que la única forma es crear un nuevo método sin el parámetro y marcar el original con ObsoleteAttribute.

+0

+1 ¡Por supuesto! =) –

7

Con el atributo obsoleto:

[Obsolete("Please use void AnotherMethod() instead", false)] 
void SomeMethod(Int32 data){ 
} 

El booleana en el atributo le dice al compilador que genere una advertencia, si cambia a true el compilador generará un error. Ver here para la documentación en él.

+0

+1 ¡Esa es la mejor manera de hacerlo! =) –

+0

¿Es posible hacer esto sin marcar todo el método como obsoleto? – Brian

+1

No, como dicen las otras respuestas (como Chris Wallis), el parámetro no es un objetivo para ObsoleteAttribute. –

Cuestiones relacionadas