2008-11-24 7 views
193

Possible en double:
How do I mark a method as Obsolete/Deprecated? - C#Comment marquer une classe comme obsolète?

Comment baliser une classe comme dépréciée? Je ne veux plus utiliser de classe dans mon projet, mais je ne veux pas le supprimer avant une période de 2 semaines.

+13

N'est-ce pas une mauvaise forme de marquer la question précédente en tant que doublon? – noelicus

+2

Nous devrions marquer la première question comme obsolète/dépréciée. Donc, la question est maintenant: Comment marquer une question comme obsolète? –

Répondre

343

Vous devez utiliser l'attribut [Obsolete].

Voici un exemple:

[Obsolete("Not used anymore",true)] 
public class MyDeprecatedClass 
{ 
    //... 
} 

Vous ne disposez pas de paramètres d'utilisation, ils sont facultatifs (méthode surchargée). Le premier paramètre est pour la raison et le dernier est de marquer une erreur dans la compilation au lieu d'un avertissement.

+0

Le '[Obsolete (" Non utilisé plus ", true)]' souffre ici de deux failles majeures: 1. Si le code n'est plus utilisé, il devrait être supprimé 2. L'explication ne fournit pas d'informations sur ce qu'il faut utiliser/faire à la place. – mayu

-5

Si vous utilisez le contrôle de version, je vous recommande de supprimer la classe. Il n'y a aucune raison d'avoir du code inutilisé.

Le contrôle de version sera un outil utile si vous décidez plus tard que vous voulez la classe.

+3

Je suppose/suppose qu'il veut marquer obsolète afin de permettre au code de compiler encore entre-temps pendant qu'il supprime toutes les références à ce code dans la base de code. – shsteimer

+0

Je suis d'accord, Pourquoi ne pas supprimer la classe, ou si vous n'avez pas de contrôle de version, le commenter? – configurator

+0

Ce serait une bonne raison de ne pas utiliser ma solution, je suppose. – jjnguy

16

La raison de ne pas effacer une classe et de la déprécier à la place est d'adhérer à certaines "politiques de politesse" lorsque votre code est une API établie et est ensuite consommée par des tiers. Si vous dépréciez au lieu d'effacer, vous donnez aux consommateurs une politique de cycle de vie (par exemple, maintenance et existence des classes jusqu'à la version X.X) afin de leur permettre de planifier une migration correcte vers votre nouvelle API.

35

Selon la réponse de Doak, mais le deuxième paramètre de l'attribut doit être défini sur false si vous voulez que le code pour compiler:

[Obsolete("Not used anymore", false)] 
public class MyDeprecatedClass 
{ 
     //... 
} 

Cela suffit de jeter les avertissements.

+1

Vous pouvez également laisser l'attribut complètement (il est par défaut à false): '[Obsolete (" Plus utilisé ")]'; Personnellement, je trouve cela plus lisible sans le booléen à la fin. – Wolfgang

Questions connexes