Je travaille sur un projet .NET, qui doit interagir avec certaines classes définies par l'utilisateur - appelées "jobs". Toutes les classes de travail doivent implémenter une interface spécifique IJob
afin que la bibliothèque puisse les utiliser. Parfois, une classe d'emplois peut contenir des ressources non gérées, qui doivent être explicitement éliminées.Comment dois-je m'assurer de l'élimination des objets éventuellement jetables?
Comment puis-je m'assurer que tous les travaux sont correctement éliminés après utilisation, si je ne sais pas à l'avance si le travail doit être éliminé explicitement? J'ai quelques idées moi-même, mais je voudrais entendre vos commentaires/suggestions:
Faire
IJob : IDisposable
, ce qui oblige tous les emplois à mettre en œuvre une méthodeDispose()
. Cela me permettra de travailler avec des emplois dans les blocsusing
, mais comme la plupart des emplois sont pas devrait nécessiter une élimination explicite, cela pourrait ajouter une confusion inutile pour les développeurs du client.Est-ce que tous les travaux impliquant des emplois dans
try-finally
blocs, et d'utiliserfinally
pour faire en sorte queDispose()
est appelé si le travail met en œuvreIDisposable
. Cela permet aux clients de mettre en œuvre une nouvelle classe d'emplois plus facilement - en n'ayant pas à implémenter une méthodeDispose()
vide - mais cela cache également le fait que la bibliothèque connaît et se soucie des travaux jetables.
Après avoir écrit ce, je tendance à se pencher vers la solution n ° 1, mais je pense toujours que ce serait agréable de voir des solutions alternatives et des avantages supplémentaires/inconvénients aux deux j'ai déjà à l'esprit.
Bon point. Cependant, la plupart des cours d'eau devront être éliminés et je m'attends à ce qu'une minorité d'emplois en ait besoin. –
Il m'apparaît que 'System.Web.IHttpModule' nécessite également ses implémenteurs pour fournir une méthode' Dispose() ', même si seulement quelques modules (IMHO) en ont besoin. Je suppose que cela fournit une priorité supplémentaire pour # 1. –
+1, je pense d'ailleurs, il est logique de fournir une méthode standardisée pour un Job pour nettoyer ce qu'il utilisait. En utilisant 'IDisposable', vous bénéficiez du support du framework et les utilisateurs finaux ont au moins à réfléchir à l'endroit où placer le code de nettoyage approprié. – user7116