recorrer - parsear un xml en c#
Comportamiento de desaprobación utilizando el atributo (1)
En realidad, es al revés: muestra que el compilador de C # es inteligente y muy claro en el uso de métodos marcados con Obsolete
.
Supongamos que está proporcionando este código como una API pública en una biblioteca de clase a Bob.
Usted espera que si Bob llama
HardDeprecatedMethod
en su código, debería obtener un error de compilación; y él lo hará.Usted espera que si Bob haya llamado a
SoftDeprecatedMethod
cualquier lugar, desde este momento en adelante, se le advierta al respecto, PERO su código aún debería funcionar; y lo hará.
¡Así que obtienes exactamente lo que quieres!
Mientras eliminaba un código obsoleto, me encontré con un escenario inesperado, recreado a continuación:
class Program
{
static void Main(string[] args)
{
ViableMethod();
Console.WriteLine("");
SoftDeprecatedMethod();//Compiler warning
//HardDeprecatedMethod();//Can''t call that from here, compiler error
Console.ReadKey(true);
}
public static void ViableMethod ()
{
Console.WriteLine("ViableMethod, calls SoftDeprecatedMethod");
SoftDeprecatedMethod();//Compiler warning
//HardDeprecatedMethod();//Can''t call that from here, compiler error
}
[Obsolete("soft", false)]
public static void SoftDeprecatedMethod()
{
Console.WriteLine("SoftDeprecatedMethod, calls HardDeprecatedMethod");
HardDeprecatedMethod();
}
[Obsolete("hard", true)]
public static void HardDeprecatedMethod()
{
Console.WriteLine("HardDeprecatedMethod");
}
}
Según la salida, parece que las funciones en desuso con una advertencia pueden llamar a las funciones en desuso con un error y el código se ejecutará.
Mi expectativa era ver un error de compilación quejándose de que la llamada a HardDeprecatedMethod()
desde SoftDeprecatedMethod()
no está permitida. El comportamiento observado me parece extraño.
¿Alguien sabe si este es el comportamiento deseado (y si es así, por qué), o podría ser un defecto en la implementación del atributo [Obsolete]
?