Chaque fois qu'un objet est à usage unique (il implémente IDisposable interface) cela signifie qu'il utilise probablement des ressources non gérées qui ne peuvent pas être gérées par garbage collector et donc si votre objet est collecté ces les ressources peuvent rester dans la mémoire causant des problèmes. La solution à ce problème est:
1.Pour implémenter l'interface IDisposable dans ce type d'objets et pour effacer/fermer les ressources non managées dans la méthode Dispose (par exemple, si vous utilisez un objet jetable dans votre objet, il vaut mieux 2. Pour appeler la méthode Dispose des objets jetables lorsqu'ils ne sont plus nécessaires, mais attention car la réutilisation d'un objet éliminé peut entraîner des exceptions. La syntaxe à l'aide que vous avez mentionné est un moyen peu de faire la même chose et il interprète ceci:
using(var obj=new myDisposableObject)
{
obj.Something();
}
en suivant:
var obj=new myDisposableObject();
try
{
obj.Something();
}
catch
{
throw;
}
finally
{
obj.Dispose();
}
donc vous pouvez toujours être sûr que quoi qu'il arrive la méthode Dispose votre objet est toujours appelé.
merci, mais je didint comprendre la dernière ligne de votre réponse, donc .... je veux savoir quand un objet utilise des ressources non gérées? – Arash
@arash: Je veux dire que même si une exception se produit, la méthode Dispose sera toujours appelée. Généralement, si un objet est jetable, cela signifie qu'il utilise des ressources non gérées. Sinon, il n'y a pas de moyen simple de réaliser qu'un objet utilise des ressources non-remaniées. – Beatles1692