03.27.08
Definiendo Métodos Obsoletos (Deprecated)
Para los programadores que trabajáis bajo el soporte de un framework o de un conjunto de librerías de terceros os habréis encontrado en alguna ocasión que a la hora de utilizar alguno de los métodos que os brinda el conjunto de clases, alguno de ellos os lo indica como “Obsoleto” o “Deprecated”.
Los métodos obsoletos son aquellos que han caido en deshuso y que el responsable de desarrollo del framework quiere, por algún motivo (reubicación del método en otra clase, cambio del nombre del método, cambio de los parámetros, nuevos métodos más eficientes…), eliminar en futuras versiones.
Normalmente un proveedor que pasa a indicar sus métodos como obsoletos lo suele hacer de alguna o varias de las siguientes formas:
1) Incorpora una descripción en la documentación indicando que el método está obsoleto y que en futuras versiones será eliminado.
2) A la hora de compilar la aplicación aparece una alerta (warning) indicando que el método está obsoleto. Nos avisa el compilador pero la aplicación sigue compilando.
3) Al utilizar el método obsoleto la aplicación directamente no compila.
Tras la teoría, unos ejemplos de cómo declarar métodos obsoletos con C#
Primero, cómo declarar una clase como obsoleta, dando warning recomendando usar otra clase en lugar de esta
[System.Obsolete("usar clase ClaseNueva")]
class ClaseAntigua
{
public void Metodo() { }
}
Segundo, cómo declarar en la nueva clase un método obsoleto, dando error de compilación si se usa un método en concreto y recomendando el uso de un método alternativo
class ClaseNueva
{
[System.Obsolete("usar MetodoNuevo", true)]
public void MetodoViejo() { }
public void MetodoNuevo() { }
}
Tercero, un ejemplo de uso de las clases
// Genera dos alertas
// (una por la instancia a la clase y otra por la llamada al constructor)
ClaseAntigua antigua = new ClaseAntigua();
// No genera ni errores ni alertas
ClaseNueva nueva = new ClaseNueva();
nueva.MetodoNuevo();
// Genera un error, terminando la compilación
nueva.MetodoViejo();
Saludos.
Miguel.