Les attributs en C# - Obsolete

De ce premier article de cette série sur les attributs en C# nous explorerons l'utilisation de ObsoleteAttribute. Cet attribut est utilisé pour signifier au compilateur qu'une classe, une struct, une méthode, un enum est considéré comme obsolète et indique ainsi à l'utilisateur qu'il doit modifier son code appelant.

Regardons un exemple ensemble:

    class Program
    {
        static void Main(string[] args)
        {
            var s = new MonService();
            Console.WriteLine(s.Welcome("home"));
        }
    }

    class MonService
    {
        public string Welcome(string nom)
        {
            return $"Welcome {nom}";
        }
    }

Si nous compilons ce programme simple tout se passe sans problème (0 warnings et 0 errors).

Si maintenant nous voulions signifier à notre programme appelant (ici Main) que cette classe sera prochainement obsolète il suffirait d'ajouter un attribut (ou décorateur dans d'autres langages) comme ci-dessous.

    [Obsolete]
    class MonService
    {
        public string Welcome(string nom)
        {
            return $"Welcome {nom}";
        }
    }

Notre programme continuera de compiler correctement et de fonctionner normalement mais nous aurons un avertissement nous indiquant que cette classe disparaitra dans le futur.

Nous voyons maintenant comment nous pouvons très simplement avertir toutes les applications que l'utilisation de cette classe est maintenant déconseillée. Nous pouvons également utiliser l'attribut sur une méthode pour signaler que celle-ci ne sera bientôt plus disponible, comme dans l'exemple suivant:

    class MonService
    {
        [Obsolete]
        public string Welcome(string nom)
        {
            return $"Welcome {nom}";
        }

        public string NewWelcome(string nom)
        {
            return $"Welcome {nom}";
        }
    }

Nous pouvons aller un peu plus loin en ajoutant un message explicatif de ce qu'il faut faire pour migrer vers le nouveau service. Si vous utilisez Visual Studio, Intellisense vous avertira également grâce à un soulignement vert.

Un dernier paramètre peut être passé à cet attribut. Le paramètre error: permet d'indiquer grâce à un booléen une erreur de compilation et donc bloquer le build de la solution. Nous voyons également que Intellisense souligne l'avertissement d'un trait rouge l'utilisation de la classe MonService.

Conclusion

Nous venons de voir comment grâce à l'attribut Obsolete nous pouvons simplement avertir ou interdire l'utilisation d'une classe ou méthode. Nous verrons dans un prochain post d'autres attributs et comment en écrire.

Liens utiles