valor recorrer parsear obtener nombre nodos nodo modificar manipular leer lectura elementos buscar atributo c# .net attributes

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.

  1. Usted espera que si Bob llama HardDeprecatedMethod en su código, debería obtener un error de compilación; y él lo hará.

  2. 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] ?