2011-08-22 4 views
4

Dans .NET, vous pouvez marquer certaines méthodes comme obsolètes afin que les développeurs soient alertés lorsqu'ils tentent d'utiliser la méthode obsolète.Marquer les méthodes natives comme obsolètes/obsolètes?

<Obsolete("Do not call this method.")> Private Sub FormerMethod() 

Le fait est que vous ne pouvez le faire que dans les classes que vous contrôlez. Que faites-vous lorsque vous voulez que vos développeurs évitent d'utiliser certaines méthodes sur des classes fournies nativement dans .NET ou par un fournisseur? Par exemple, si vous voulez que votre développeur préfère une méthode d'extension personnalisée sur DataTable plutôt que Select. Je détesterais avoir à définir une version personnalisée de la classe DataTable si seulement pour désapprouver Select. Cela nous obligerait à surveiller si la table personnalisée était utilisée ou non. Je suis conscient qu'il existe des outils comme (FxCop) qui aident à appliquer les normes de codage; Cependant, ma question est de savoir si cela peut être géré sans un outil tiers.

+1

Effectuez-vous des révisions de code? –

+0

+1 C'est aussi un bon conseil. – Tejs

Répondre

2

Bien que vous n'aimez pas la réponse, je pense que l'emballage serait le bon choix.

Pour le code d'un fournisseur tiers, l'emballage devrait être obligatoire uniquement pour produire un niveau d'abstraction pour les tests unitaires. Et étant un wrapper, vous pouvez évidemment marquer les méthodes comme Obsolete.

Pour les objets .NET, c'est un peu plus compliqué. Évidemment, quelqu'un peut simplement inclure l'espace de noms et aller en ville; Je ne crois pas qu'il existe une solution «code seulement» à ce problème comme vous le souhaitez, sauf peut-être faire un test d'intégration qui recherche votre solution et échoue lorsque cette méthode particulière que vous n'aimez pas est appelée.

+0

Je pense que l'emballage est probablement un bon point, car je ne sais pas que .NET me permet de faire ce que je veux faire. Merci! – Mario

2

Si vous souhaitez marquer une classe .Net Framework comme obsolète, vous pouvez la redéfinir dans l'une des classes \ infrastructure partagées que tout le monde utilise.

Exemple:

namespace System.ComponentModel 
{ 
    [Obsolete("Please do not use BackgroundWorker. Use class XXXX instead.")]  
    public class BackgroundWorker 
    { 

    } 
} 

Il peut être fait aussi des méthodes spécifiques en étendant la classe Net Framework d'origine, puis remplaçant des méthodes spécifiques qui appellent la méthode de base, mais sont décorées avec l'attribut Obsolete.

Cependant, vous devrez résoudre la définition de classe circulaire (peut-être en utilisant un alias de référence d'assembly).

+0

Cela semble fonctionner pour obsolète une classe système. –

Questions connexes