Qu'advient-il si je ne suis pas d'appel dispose sur le stylo d'objet?

Ce qui se passe si je ne l'appelez pas Dispose sur le pen objet dans cet extrait de code?

private void panel_Paint(object sender, PaintEventArgs e)
{
    var pen = Pen(Color.White, 1);
    //Do some drawing
}
  • Rien. C'est pourquoi vous devriez l'appeler.
  • Il me semble que la documentation MSDN sur ce que la méthode n'est assez clair. msdn.microsoft.com/en-us/library/...
  • Eh bien, je suppose que je pourrais avoir formulé la question de ce qui ne se produit pas si je ne l'appelez pas Dispose, mais je crois que vous comprenez ce que je veux dire?
  • Une meilleure question est, pourquoi ne voulez-vous pas de l'appeler Dispose()? Si j'avais écrit cela, je le mettrait dans une instruction d'utilisation.
  • Je sais que je suis censé appeler dispose, j'essaie de comprendre pourquoi. Si c'est si important que je l'appelle, pourquoi n'est-il pas fait automatiquement?
  • .net ne fait pas échapper à l'analyse. Ainsi, il ne sait pas si la référence survit après pen est hors de portée. Ainsi, vous devez attendre jusqu'à ce que le GC décide de recueillir le Pen qui pourrait être beaucoup plus tard.
  • Et pour les objets qui font partie d'un objet graphique(ce n'est pas le cas pour Pen) l'objet peut être maintenu en vie par quelques références qui sont supprime uniquement si vous disposez de l'objet.
  • pourquoi n'est-il pas fait automatiquement? "Quand serait-il "l'appeler automatiquement" ??! Comment le cadre de déterminer le moment de l'appeler.. c'est à vous, le programmeur... et c'est pourquoi la langue concepteurs ont ajouté la using mot-clé, pour vous permettre de spécifier quand à appeler sans avoir à écrire explicitement un appel à elle...
  • Brinck: je sais que ce n'est pas la réponse à votre question. C'est pourquoi il n'était pas une réponse, mais un jeu de mots dans un commentaire. Même si je pense que le terme correct est "truisme" plutôt que de "sarcasme". Ou, peut-être, "wiseassery" - comme dans ce commentaire 😉
  • Si vous êtes trop paresseux pour type myobj.Dispose(), vous devez emballer votre code avec un [using énoncé](msdn.microsoft.com/en-us/library/yh598w02(v=VS.80).aspx.
  • Ce n'est pas juste de la paresse depuis que vous aviez besoin d'utiliser try...finally d'exception de sécurité et le code est plus difficile à lire qu'à l'aide de using.
  • Aller en prison. Aller directement à la prison. Ne passez pas aller, ne recueillent pas 200 dollars.
  • Le problème est que parfois vous ne pouvez pas utiliser "utiliser", par exemple lorsque votre classe doit contenir les champs de non géré type.