Salut,
J'aurai voulut avoir un renseignement et des avis. Mon but serait d'implémenter une méthode dispose() pour permettre de désallouer proprement la mémoire occupée par chaque instanciation d'une classe que j'ai écrite, et qui utilise des objets ADO .NET pour se connecter à une base de données sql server 2000 et insérer, supprimer, mettre à jour des données dans la base. Cette classe dispose des champs suivant (suivis de méthodes pas intéressantes pour ce sujet) :
Public AgentID As New SqlClient.SqlParameter("@AgentID", SqlDbType.Int)
Public BrigadeID As New SqlClient.SqlParameter("@BrigadeID", SqlDbType.Int)
Public FonctionID As New SqlClient.SqlParameter("@FonctionID", SqlDbType.Int)
Public Visa As New SqlClient.SqlParameter("@Visa", SqlDbType.Image)
Je voulais savoir, d'une part, si l'implémentation de la méthode dispose(), dans mon cas, est judicieuse, ou s'il vaut mieux laisser faire le garbage collector. Dans le cas ou son implémentation serait une bonne chose, je me heurte à un petit problème. L'objet SqlClient.SqlParameter ne propose pas de méthode dispose. Ainsi, lorsque je veux le caster en IDisposable, lors de l'execution, .NET me dit que j'ai pas le droit de faire ce cast. Comment faire?
Voici mon code:
Private disposed As Boolean = False
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not disposed Then
If disposing Then
If Not AgentID Is Nothing Then
CType(AgentID, IDisposable).Dispose()
End If
If Not BrigadeID Is Nothing Then
CType(BrigadeID, IDisposable).Dispose()
End If
If Not FonctionID Is Nothing Then
CType(FonctionID, IDisposable).Dispose()
End If
If Not Visa Is Nothing Then
CType(Visa, IDisposable).Dispose()
End If
End If
disposed = True
End If
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
End Sub