Question

J'ai une classe (disons MyClass) qui utilise (comme un champ a privé) un objet TcpClient. MyClass implémente IDisposable d'appel de TcpClient.Close dans la méthode Dispose.

Ma question est devrait MyClass aussi mettre en œuvre un finaliseur d'appeler Dispose(bool Disposing) pour libérer les ressources non gérées TcpClient’s en cas MyClass.Dispose est pas appelé par le code d'appel?

Merci

Était-ce utile?

La solution

Non, vous ne devriez pas.

Parce que vous ne devriez jamais appeler une méthode sur un autre objet dans un finaliseur , il aurait pu être finalisé avant votre objet.

Le finaliseur de votre TcpClient sera appelé par le collecteur des ordures, alors laissez-le faire.

Le modèle en Dispose est:

protected virtual void Dispose(bool disposing)
{
   if (disposing)
   { 
      // dispose managed resources (here your TcpClient)
   }

   // dispose your unmanaged resources 
   // handles etc using static interop methods.
}
scroll top