... si j'utilise un IDisposable dans une variable locale, mais n'appelle pas Dispose() ou utilise le pattern using().Existe-t-il une règle FxCop pour les IDisposables locaux utilisés?
public void BadMethod()
{
var fs = new FileStream("file.txt", FileMode.Create);
fs.WriteByte(0x55);
// no dispose, no using()
}
Tout comme la règle "Types that own disposable fields should be disposable" pour les champs.
EDIT: Remplacée par MemoryStream FileStream, car MemoryStream alloue seulement la mémoire et ne pas utiliser les ressources (non gérés), de sorte que quelqu'un pourrait discuter d'un appel Dispose() obligatoire.
Pourquoi voudriez-vous cela? C'est inutile, la mémoire n'est pas jetable. Si tout va bien nous n'obtiendrons pas un outil qui le dit, il détruira des esprits de programmeur irrémédiablement. –
@nobugz: Il est toujours correct d'appeler Dispose sur MemoryStream. Le fait que MemoryStream n'utilise aucune ressource non gérée est un détail de * implementation *. Le ** contrat ** pour MemoryStream dit qu'il implémente IDisposable, et en tant que tel, il devrait toujours avoir Dispose appelé. Il est toujours préférable de coder le contrat par rapport aux détails d'implémentation spécifiques. – casperOne
@capser: oui, certains programmeurs aiment la Machine pour leur dire quoi faire. C'est une religion à laquelle je ne souscris pas, je préfère briser le rulez sciemment. Allez-y et faites-le à votre façon, vous n'aurez jamais tort. Simplement lent. –