La utilización de los objetos declarados de una clase, dependerá de la implementación de la clase en cuestión, que es la que le proporciona los recursos a los objetos.
La utilización del objeto, una vez declarado, será
Asignar valores a las propiedades, si estas lo requieren o lo necesita el código, y si no se ha hecho ya en la declaración del objeto.
Hacer uso de los métodos disponibles de la clase en el momento adecuado.
Finalizar el objeto, si procede, o dejar que la salida del procedimiento acabe con el mismo.
El uso dependerá evidentemente del tipo de clase que se haya implementado.
La codificación del uso de la clase puede hacerse bajo dos estilos de código.
El primero podría decirse que es el habitual.
Definir
Usar
Y no realizar acciones especificas de finalización, o utilizar la clase GC.
Dim Objeto As New Clase(6)
Objeto = Nothing
GC.Collect()
Con el método Collet de la clase GC, se obliga a la recuperación de los resursos libres del sistema.
La clase GC, controla el recolector de elementos no utilizados del sistema, es un servicio que reclama de forma automática la memoria que no se utiliza.
Los métodos de esta clase influyen en el momento en que se realiza la recolección de elementos no utilizados de un objeto y en el momento en que se liberan los recursos asignados por un objeto.
Las propiedades de esta clase proporcionan información sobre la cantidad de memoria total disponible en el sistema y la categoría de edad, o generación, de la memoria asignada a un objeto.
El segundo, y sobre todo si se consumen muchos recursos del sistema, es utilizar la instrucción Using, End Using.
Con esta instrucción se garantiza la recuperación de los recursos al finalizar el uso de los objetos.
Using Objeto As New Clase(7)
MsgBox("El valor de la propiedad es " & Objeto.Propiedad & ".")
End Using
El objeto creado como instancia de una clase, cuando se libera ejecuta el método finalize de la clase.
Este método existe por defecto.
Ese método se ejecuta siempre de forma predeterminada antes de liberar el objeto.
Por lo tanto todas aquellas acciones que sean imprescindibles realizar antes de que se destruya el objeto se deben realizar en ese método.
Por ejemplo realizar el cierre de archivos, o de una conexión con base de datos.
Para finalizar el uso de un objeto se establece a Nothing, y a partir de ahí la referencia al mismo no es posible.
Objeto = Nothing
También podemos preguntar por
If Objeto IsNot Nothing Then ...
Lo que nos permite saber si un objeto sigue haciendo referencia a algún recurso.
El ejemplo que sigue expresa de forma bastante efectiva la secuencia y el funcionamiento de los métodos Dispose y Finalize, para su correcto funcionamiento hay que poner en las propiedades de proyecto como elemento inicial el Sub Main.
Este es el código principal del ejemplo, donde se crean los objetos para la prueba.
Module Principal
Sub Main()
' Demostración de como Using llama al método dispose
Using Objeto As New ClaseHeredera(6)
MsgBox("El valor de la propiedad después de la “ & _
“inicialización es " & Objeto.Propiedad & ".")
End Using
MsgBox("Punto intermedio entre demos.", MsgBoxStyle.Information)
' Demostración de como el Recolector de objetos
' del CLR, Common Lenguage Runtime, llama al método finalize.
Dim OtroObjeto As New ClaseHeredera(6)
OtroObjeto = Nothing
GC.Collect()
End Sub
End Module
Y este es el módulo con el código de las clases del ejemplo.
Module ClaseDos
Public Class ClaseBase
Sub New()
MsgBox("ClaseBase inicializándose con el método New.")
End Sub
Protected Overrides Sub Finalize()
MsgBox("ClaseBase haciendo shutdown con el método Finalize.")
MyBase.Finalize()
End Sub
End Class
Public Class ClaseHeredera
Inherits ClaseBase
Implements IDisposable
Private ValorPropiedad As Integer
Sub New(ByVal Valor As Integer)
' La llamada al método New de la clase base ess obligado.
MyBase.New()
MsgBox("Clase heredera se inicializa con el método New.")
ValorPropiedad = Valor
End Sub
Property Propiedad() As Integer
Get ' Entrada
CheckIfDisposed()
Propiedad = ValorPropiedad
End Get
Set(ByVal Value As Integer) ' Salida
CheckIfDisposed()
ValorPropiedad = Value
End Set
End Property
Protected Overrides Sub Finalize()
MsgBox("Clase heredera haciendo shuttdown con el método Finalize.")
Dispose(False)
End Sub
' No añadir Overridable a éste método.
Public Overloads Sub Dispose() Implements IDisposable.Dispose
MsgBox("Clase heredera haciendo shuttdown con el método Dispose.")
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Private disposed As Boolean = False
Public Sub CheckIfDisposed()
If Me.disposed Then
Throw New ObjectDisposedException(Me.GetType().ToString, _
"Este objeto ha sido liberado.")
End If
End Sub
Protected Overridable Overloads Sub Dispose( _
ByVal disposing As Boolean)
MsgBox("Clase heredera haciendo shuttdown con el ” & _
“método Dispose sobrecargado, OverLoad")
' Código de tareas finales
If Not Me.disposed Then
If disposing Then
' Dispose de cualquier recurso utilizado.
End If
' Dispose de cualquier recurso.
' Llamar a MyBase.Finalize si es una clase derivada ,
' y la clase base no ejecuta Dispose.
MyBase.Finalize()
End If
Me.disposed = True
End Sub
End Class
End Module
Síguenos en: Facebook Sobre aulaClic Política de Cookies