Nécessité de mettre en œuvre un finaliseur sur une classe qui utilise TcpClient?
-
23-08-2019 - |
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
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.
}
Autres conseils
Non, vous ne devriez pas.
Oui, vous devriez - Microsoft recommande même le .
Rappelez-vous simplement que le code courroie et bretelles ne vous est appelé dans le bureau à 02h00:)